gpt4 book ai didi

operators - Xtend 猫王? : operator doesn't work as expected

转载 作者:行者123 更新时间:2023-12-04 05:01:59 24 4
gpt4 key购买 nike

我正在使用 Xtend 编写一个 Android 应用程序,并且我想使用 elvis 运算符来简化以下操作(可行):

val c = if (projection != null) new MatrixCursor(projection) else new MatrixCursor(#[MediaStore$MediaColumns::DISPLAY_NAME, MediaStore$MediaColumns::SIZE])

通过使用 elvis 运算符,我写道:
val c = new MatrixCursor(projection ?: #[MediaStore$MediaColumns::DISPLAY_NAME, MediaStore$MediaColumns::SIZE])

据我了解,它的工作方式相同。

但是,我在 Eclipse 中遇到了这个错误: Type mismatch: cannot convert from Object to String[]它出什么问题了?

我正在使用 Xtend 2.4, MatrixCursor构造函数签名是 MatrixCursor(String[]) , 和 projection明确定义为 String[] .

最佳答案

您偶然发现了类型推断的限制。 elvis 运算符的定义如下:

def <T> T elvis(T original, T placeholder) {
..
}

如果要绑定(bind)类型变量 T,则计算两个操作数类型。由于数组文字 #[..]实际上主要是一个列表文字,T 的绑定(bind)是从 String[] 计算的和 List<String>而不是两个 String[] .因此,常见的父类(super class)型是 Object所以猫王只是一个 Object .您可以说服类型系统,您希望第二个操作数是 String[]通过显式转换:
val c = new MatrixCursor(projection ?: #[DISPLAY_NAME, SIZE] as String[])

关于operators - Xtend 猫王? : operator doesn't work as expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16051615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com