【发布时间】:2022-07-21 21:21:52
【问题描述】:
在 Kotlin 中,我可以执行以下操作:
var myType : KClass<String>? = null
并且可以像这样分配给它:
myType = String::class
但不喜欢:
myType = Int::class // Type mismatch: inferred type in KClass<Int> but KClass<String>? was expected
在 Dart 中有类似的东西吗?我知道Type 类型,但它不是通用的,虽然它可以代表String 或List<int>,但我似乎无法编写与我的Kotlin 示例类似的代码:
Type? t = null;
我可以分配给它:
t = String;
还有:
t = int;
但我希望第二个示例编译失败。我需要某种Type<String>。这在 Dart 中可行吗?
【问题讨论】:
-
为什么不能
'' is String或1 is String?为什么需要通用的东西?或者如果你真的需要一个通用函数,为什么不bool test<T>(Object? object) => object is T;?或者,如果您需要编译时错误,那么void test<T>(T object) {}似乎也可以,但这似乎很愚蠢。只需首先声明您想要的类型。 -
@jamesdlin 我不需要测试类型,我认为方法的名称令人困惑,我将更改名称。一般来说,这是一个非常简单的示例,我可以展示我想要的东西,而不是真正的代码 - 我只想知道是否有类似 Type
的东西。 -
我不知道
Type<T>应该做什么或意味着什么。对于您的aFunction示例,您应该首先将其设为通用:aFunction<T>(T argument),您可以将其称为aFunction<String>('')(或省略类型并让它被推断)。如果您需要将Type对象作为实际参数传递,那么不,您在编译时无能为力。但实际上你应该避免使用Type对象;它们不是很有用。这听起来很可能是XY problem;这将有助于了解您真正想要做什么。 -
我确实需要这种类型。也许我的例子不是最好的,让我再编辑一次。但我想无论如何都没有。
-
我的代码已经可以工作了,只是我不喜欢 Kotlin 中没有的一些松散的类型安全性,我正在尝试了解我是否可以让它变得更好。