如何将通用参数传递给使用对象的方法?

克里斯

我有一个带有通用参数的方法 foo<T>需要传递给Object消费 bar 方法。为什么我们需要强制转换为Object,一切都扩展Object

fun <T> foo(arg:T) {
    bar(arg)            //doesn't compile
    bar(arg as Object)  //compiles only with cast to Object
}

fun  bar(x:Object){} 
马尔科·托波尔尼克

您尚未为 指定任何上限T因此使用隐含的上限:T: Any?

该函数bar()采用Object并且Any?与它不兼容。Object是 的一种特定子类型Any?

的另一个特定子类型Any?Int并且它也不是 的子类型Object不可为 nullInt编译为 JVM 原始类型int,这显然不是 的实例Object

最后,您应该重新考虑Object在 Kotlin 中任何地方的使用我的 IDE 立即用警告标记它。所以,声明

fun bar(x: Any?) { }

或者,如果您想强制执行不可空性,

fun bar(x: Any) { }

在后一种情况下,您还必须限制 的上限T

fun <T: Any> foo(arg: T) { ... }

但是,您发布的示例代码甚至没有激发通用参数T,因此您可能只需要

fun foo(x: Any) { ... }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将通用枚举传递给方法并将其设置为方法内部的动态对象

.Net反射使用通用参数调用函数-如何将类型传递给函数

如何将参数传递给Scrapy管道对象

如何将JSON对象作为参数传递给url?

如何将函数参数传递给R模型对象

如何将类型对象作为参数传递给 Web Api Get/Post 方法

如何将JSON对象从ActionMethod作为参数传递给MVC中的其他Action方法?

我应该如何将localStream对象作为参数传递给rtcpeerconnection addtrack方法

如何将参数传递给方法[]的方法定义?

Delphi-如何将通用参数传递给接受const参数数组的函数

如何将String参数传递给void方法?

如何将方法引用传递给协变参数

如何将参数传递给模拟类方法?

Java:如何将动态数量的参数传递给方法

如何将参数传递给Express post HTTP方法?

如何将ArrayList传递给varargs方法参数?

如何将参数传递给TimerTask运行方法

如何将参数传递给Thread中的ThreadStart方法?

如何将参数名称传递给方面方法

如何将数组作为单独的参数传递给方法

如何将Variant或TObject传递给相同的方法参数?

如何将参数传递给api post方法?

如何将类作为可选参数传递给方法?

如何将参数传递给方法装饰器

如何将 Func<T> 传递给方法参数

如何将 .class-type 参数传递给方法

如何将参数传递给方法创建

如何将参数传递给 Vue $createElement 方法

如何将变量/参数传递给android view方法