我应该将啥对象传递给需要 Void 的函数!在参数中? (科特林)
Posted
技术标签:
【中文标题】我应该将啥对象传递给需要 Void 的函数!在参数中? (科特林)【英文标题】:What object should I pass to a function that requires Void! in a parameter? (Kotlin)我应该将什么对象传递给需要 Void 的函数!在参数中? (科特林) 【发布时间】:2021-12-31 11:35:08 【问题描述】:我正在使用合约 ActivityResultContracts.TakePicturePreview() 来捕获一个小图像。
private val cameraLauncher =
registerForActivityResult(ActivityResultContracts.TakePicturePreview()) bitmap ->
view?.findViewById<ImageView>(R.id.imageOutput)?.setImageBitmap(bitmap)
当我尝试为 Result 启动 Activity 时,我意识到这个合约需要一个 Void!对象作为输入。因此,我可以启动此活动的唯一方法是将“null”作为参数传递,我认为这不是很漂亮。
cameraLauncher.launch(null)
我尝试过传递“Nothing”、“Unit”,但类型不匹配。
这样做的正确方法是什么?
该函数的标题是
public void launch(Void input)
【问题讨论】:
你试过cameraLauncher.launch()
吗? activity-ktx
中有一个 Kotlin 扩展程序可以为您处理这种情况。
@ianhanniballake 哦,谢谢 :) 我已经尝试过了,它可以工作。发问题之前,我没有导入activity-ktx
,所以这个扩展功能不可用。有了这个库,这段代码更漂亮了!
【参考方案1】:
根据 Java 文档,
Void 类是一个不可实例化的占位符类,用于保存对代表 Java 关键字
void
的 Class 对象的引用
由于 Void 类无法实例化,因此您可以传递给具有 Void 类型参数的方法的唯一值是 null
。
首先需要这样做的原因是因为所有 ActivityContracts 都继承自基础 abstract class ActivityResultContract<I, O>
,它需要输入 (I
) 和输出 (O
) 两种数据类型。由于TakePicturePreview
不需要任何输入,因此它使用Void?
来弥补这一点。
现在回答,
这样做的正确方法是什么?
传递null
是正确的(也是唯一的)方法。
【讨论】:
以上是关于我应该将啥对象传递给需要 Void 的函数!在参数中? (科特林)的主要内容,如果未能解决你的问题,请参考以下文章
我应该将啥“长度”参数传递给 SqlDataReader.GetBytes()
导入 tkinter 文件时,我应该将啥参数传递给“root”?