Tag: 铸造

有没有更好的方式在列表中过滤null?

我这样做过滤空值列表: val myList: List<Any?> = […] myList.filter { it != null }.map { it!! } myList.get(0).xxx // don't need to write "?." 如果我不添加map ,列表不会成为List<…> 。 有没有更好的方法来做到这一点?

如何将Class <?>转换为Class <T>?

我有Class<?>字段的类。 我有一个方法,它必须在Jackson的帮助下将字符串投射到对象上。 private Class<?> myType = …; private String jsonRepresentationOfObject = ….; ObjectMapper mapper = new ObjectMapper(); public <T> T get() { return mapper.readValue(jsonRepresentationOfObject, myType); } 有没有可能将myType为T ? 或者这是不可能的,因为类型擦除?

演员不可能成功

我是Kotlin的新手,目前我正在研究面向对象的概念 我正在尝试使用此代码进行强制转换,但是我遇到了一个错误: open class Operations1(){ open fun sum(n1:Int , n2:Int):Int{ return n1+ n2 } fun sub(n1:Int , n2:Int):Int{ return n1- n2 } } class multiOperations1():Operations(){ override fun sum(n1:Int , n2:Int):Int{ return n1+ n2 +5 } fun mul(n1:Int , n2:Int):Int{ return n1* n2 } fun div(n1:Int , n2:Int):Int{ return n1/ n2 } } fun main(args:Array<String>){ var […]

尽管在这个例子中已经确定了,为什么仍然需要强制类型?

今天我在Kotlin Docs中遇到了这个部分。 被称为“聪明的演员”,Kotlin似乎“在需要时自动插入(安全)演员”: 在很多情况下,不需要在Kotlin中使用显式的转换运算符,因为编译器会跟踪不可变值的is-checks,并在需要时自动插入(安全)转换: fun demo(x: Any) { if (x is String) { print(x.length) // x is automatically cast to String } } 我不明白在这个例子中“智能铸造”是做什么的。 似乎没有什么需要铸造,因为x将始终是字符串,因此x.length将始终工作,不需要铸造。 print线上发生了什么? 提前致谢!

Smartcast是不可能的,因为propery有开放或自定义的getter

我正在学习Kotlin。 我的代码如下: override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) decoupler.attachNotifier(this) if(activity is ScreenRouter) { decoupler.attachRouter(activity) } } attachRouter()方法: fun attachRouter(router: ScreenRouter?) { this.router = router } 正如在文档中所写的,kotlin在与操作员核对之后自动进行类型转换。 所以,我预计它会工作。 但相反,它困扰我编译错误说: Smartcast到ScreenRouter是不可能的,因为activity是一个开放的或自定义的getter。 我想也许错误是因为活动可以为空,所以我试过: if(activity!=null && activity is ScreenRouter) { decoupler.attachRouter(activity) } 但它没有工作,编译失败,同样的错误。 但是,下面的代码工作正常: if(activity is ScreenRouter) { decoupler.attachRouter(activity as ScreenRouter) } 它没关系,但上面的错误似乎并没有解释为什么smartcast失败的任何事情。 我不是Kotlin的专家,我只是一个学习Kotlin的初学者。 我没有找到任何文件。 这些错误的描述使Kotlin可怕的学习。 […]

nussafe在kotlin中如何繁殖?

考虑代码示例: val contentLength :Long? = 1 val float = contentLength?.toFloat() val any = (float ?: 0) * 1.25 // ^ // compilation error here 如果我尝试像这样提取变量: val casted = (float ?: 0) IDE显示casted有Any类型。 为什么会发生? 如何从float引用获取nullsafe浮点值并将其乘以另一个浮点值? 更新 用0.0代替0 : (float ?: 0.0) 没有效果。 🙁

动态投入Kotlin

我想通过使用KClass<Int> ,具有一个KClass<Int>和一个Any实际为Int的Any为Int 。 fun <T> cast(any: Any, clazz: KClass<*>): T = clazz.java.cast(any) cast(0, Int::class) 但是,我得到这个错误。 java.lang.ClassCastException:无法将java.lang.Integer转换为int 你知道任何解决方案,除了any as Int ?

Java和Kotlin使用泛型进行铸造。 丢失类型安全

当在Kotlin / Java中编码时,我偶然发现了使用投射和泛型的东西。 似乎有可能让类型系统相信列表的类型是List<Foo> ,而它实际上是一个List<Object> 。 任何人都可以向我解释为什么这是可能的? 以下是Kotlin和Java中的一个例子: 在Kotlin的例子 fun <T> test(obj: Any): List<T> { val ts = ArrayList<T>() ts.add(obj as T) return ts } fun <T> test2(obj: Any): T { return obj as T } fun <T> test3(obj: Any): List<T> { val ts = ArrayList<T>() ts.add(test2(obj)) return ts } fun main(args: Array<String>) { val […]