Tag: jvm

Kotlin:UnsupportedOperationException用于get / set操作符

我试图将我的库中read和write的函数分别转换为运算符函数get和set 。 我的函数使用一个泛化的泛型类型,它们也是内联的方法。 (你可以在这里看到我的图书馆。) 编译器没有让我通过的问题,我不明白为什么使用非运算符函数推理工作得很好,但使用运算符在运行时失败。 Exception in thread "main" java.lang.UnsupportedOperationException: This function has a reified type parameter and thus can only be inlined at compilation time, not called directly. at kotlin.jvm.internal.Intrinsics.throwUndefinedForReified(Intrinsics.java:173) at kotlin.jvm.internal.Intrinsics.throwUndefinedForReified(Intrinsics.java:167) at kotlin.jvm.internal.Intrinsics.reifyJavaClass(Intrinsics.java:201) 代码如下: operator inline fun <reified T> get(address: Long): T { … } operator inline fun <reified T> get(address: Int): T […]

Kotlin lambda体内的“it”是什么?

例如在以下两个代码中: File("./file1.txt").forEachLine { println(it) } 和 File("somefile.txt").bufferedWriter().use { out -> history.forEach { out.write("${it.key}, ${it.value}\n") } } 在这个代码中是什么意思?

我怎样才能在Kotlin中得到一个随机数字?

一个泛型的方法,可以返回一个随机整数之间的2个参数,如ruby与rand(0..n)

如何从字符串转换为Kotlin类的接口/类?

我用Class.forName("classname").kotlin获得一个类。 我知道这个类实现了一个非常简单的Interface (如果你有一个和我想的不同的解决方案,它也会很好) interface Runner { fun run(): String } 当我尝试投我的课,使用这个功能,就像这样 val result = (Class.forName("classname").kotlin as Runner).run() 我得到以下错误: kotlin.reflect.jvm.internal.KClassImpl cannot be cast to Runner 有没有办法做到这一点? 我也尝试了Class.forName("classname").kotlin.functions ,然后尝试从那里执行的功能,但我没有成功。 如果您知道这个问题的Java解决方案 (从类名称中调用一个函数),那么也可以很高兴地听到这个问题。

Kotlin:避免创建FqNameUnsafe和FqName

我注意到我的应用程序创建了大量的FqNameUnsafe和FqName实例。 什么时候创建? 我怎样才能避免这些创造? (我需要减少我的应用程序中的垃圾创建。)

Kotlin:编译器不会推断一些运算符的泛型类型

为什么Kotlin的编译器不能用一些运算符调用来推断泛型? 例如: class Example { operator inline fun <reified T : Any> unaryMinus(): T { … } } 在主要方法中使用它… fun main(args: Array<String>) { val ex = Example() val works: Boolean = ex.unaryMinus() val doesntWork: Boolean = -ex }

简单的方法来找出一个类是匿名/对象,并从Kotlin实例中获取具体的类名

在实现toString等时,我有时会打印/记录具体的类名。 是否有一个容易/提供的方式来获得这个甚至匿名类? 看起来Kotlin反射库中的方法比java少。 目前,我正在这样做: instance::class.qualifiedName?: instance::class::superclasses.get()[0].qualifiedName) 这真是丑陋,我不知道是否每次都保证是正确的,除非超类的列表是排序的。 有没有像java.lang.reflect中的kotlin反射方法,就像输入someClass.isAnonymous()一样简单?

Kotlin委托属性实现'provideDelegate'操作符函数,但方法从未调用过

我有一个基本类型DbType这是扩展我的模型是这样的: interface DbType { fun <T : Any> field() = PropertyMapper<T>() } PropertyMapper类是这样实现的: class PropertyMapper<out T : Any> internal constructor() { @Suppress("UNCHECKED_CAST") operator fun getValue(inst: DbType, prop: KProperty<*>): T { return ImplementationDetail.values?.get(prop.name) as T? ?: throw NullPointerException("No such ${prop.name} in type ${inst::class}") } operator fun provideDelegate(inst: DbType, prop: KProperty<*>): ReadOnlyProperty<DbType, T> { TODO() } } […]

在Kotlin中,我如何习惯性地访问可空的嵌套地图值,或者返回一个默认值?

Quick Kotlin的最佳实践问题,因为我不能从文档中找到最好的方法。 假设我有下面的嵌套地图(为了这个问题的目的,明确指定了键入): val userWidgetCount: Map<String, Map<String, Int>> = mapOf( "rikbrown" to mapOf( "widgetTypeA" to 1, "widgetTypeB" to 2)) 下面的模式可以更简洁吗? fun getUserWidgetCount(username: String, widgetType: String): Int { return userWidgetCount[username]?.get(widgetType)?:0 } 换句话说,如果用户已知,并且他们有一个用于该窗口小部件类型的条目,则返回用户窗口小部件数量,否则为零。 特别是我看到我可以使用[]语法初始访问地图,但在使用?.之后,我看不到在第二级执行此操作的方法?. 。

清除在Kotlin的控制台

像在Java中一样使用通常的Runtime.getRuntime().exec("clear") ,没有任何反应。 但是,如果使用touch test.txt则确实会创建一个文本文件。 有没有这个原因,如果有的话,有没有其他的选择? 两者都在同一个环境中的Java中工作。 编辑:错过的括号