问题标签 [kotlin-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
generics - Kotlin 编译器的类型推断无法选择调用哪个方法(泛型类型的歧义)
所以,我有一些带有这些签名的 Java 方法(为简单起见,删除了注释和代码主体):
我在 Kotlin 中有一些代码,它调用了“加入”方法:
到目前为止,一切都很好; 它将传播可变参数并调用前一个方法签名。好的!
例如,如果我想使用“分隔符”参数调用后一种方法签名,则会出现问题:
此代码不会编译。编译器无法决定调用哪个方法。错误:
错误:(5, 13) Kotlin:无法在未完成类型推断的情况下从以下候选中进行选择:public open fun join(vararg array: String!): String! 在 JavaClass 中定义 public open fun join(separator: CharSequence!, vararg array: String!): String! 在 JavaClass 中定义
我什至不能命名参数,因为 Kotlin 不允许为非 Kotlin 函数命名参数。
编辑:用 Java 方法标头中的纯字符串引用替换了E泛型类型参数,它起作用了!所以我猜这是类型推断与泛型类型或类似类型的不兼容?
我很确定这必须与扩展运算符(*)有关。但是如果我不使用它,我就无法将 varargs 参数传递array
给函数。join
如何在不接触 Java 代码的情况下解决这个问题?
是的,我知道有 Array.joinToString 扩展功能,但这只能解决这种特殊情况。我需要知道一个通用的解决方案。
java - 从 Kotlin 对象中的接口访问字段
我已经开始将我的一些代码从 Java 转换为 Kotlin。
其中一些是数据库模式类,包含不同列名的常量(我在这里使用 Android)。
我已经final class
用static
常量修改了我的 Java,因此它是object
Kotlin 中的常量(const
):
}
Android中的BaseColumns
类基本上是这样的:
但是,此代码现在无法编译:
未解决的参考:_ID
这对我来说没有意义,因为MySchema
实现了BaseColumns
接口,因此应该继承它的字段。
在我将数据库模式类转换为 Kotlin 之前,未编译的代码能够编译 - 即:
我希望这是有道理的。
我在这里做错了什么?
firebase - Kotlin:无法使用 GenericTypeIndicator 调用 Firebase 数据库的 getValue
List<String>
当使用 Kotlin 处理 Firebase 数据库时,如果我使用GenericTypeIndicator
如下a ,我似乎无法检索类型的值:
它会从 Firebase SDK 产生一个异常,如下所示:
但是,如果我从 Java 调用它,如下所示,它可以工作:
我猜测它与类型具体化有关,所以我这样做了:
但同样的例外发生了。
为什么会这样?
编辑:我尝试使用 jadx-0.6.1 反编译 Java 和 Kotlin 版本。
Java源码:
反编译:
Kotlin 源码(一):
反编译:
ArrayList
按照 Doug 的建议使用 Kotlin 源代码 (2) :
反编译:
android - 使用新的 kotlin 1.1 构建错误,kapt 无法解析数据绑定参数
我将我的项目从 android studio 2.2 更新到 android studio 2.3 并将项目从 kotlin 1.06 增加到 kotlin 1.1
这是我得到的错误
build.gradle
文件:
java - 将 Thread/Runnable 实现从 Java 转换为 Kotlin
我有一个现有的 Java 类ThreadUtils
,其方法every
如下:
我正在尝试将其转换为 Kotlin。我对 Runnable 关闭有点犹豫。这失败了一个坏的return
:
我还尝试将 Runnable 拉出来只是为了帮助自己分离事物,但这也以同样的方式失败:
如何实现一个@FunctionalInterface
或类似样式的闭包/ lambda,它不尝试return
从定义它的函数中获取?
android - 无法使用 RxKotlin 'observeOn' 主线程
我正在尝试使用以下方法在主线程上观察 observable:
但我收到以下错误:
我订阅的 Observable 来自一个用 Java 编写的库,因此使用了 RxJava。
我是不是很愚蠢,错过了什么?我很困惑:$
提前致谢 :)
java - Kotlin java 抽象类 IllegalAccessError
我遇到了 java interop 和 Kotlin 的问题我有一个包保护的 java 抽象类,AbstractTest
它被用作另一个类的成员,TestHolder
。当我创建抽象类的派生实例Test
并尝试在 kotlin 中使用它时,我得到:
java.lang.IllegalAccessError:试图从 KotlinTest 类访问类 test.AbtractTest
相同代码的 Java 版本似乎可以正常工作...
kotlin - Kotlin:如何将数组传递给 Java 注释
我想使用@OneOf
注释package io.dropwizard.validation;
Java用法:
Kotlin 用法:???
我试过这个:
和这个:
(编辑:这个例子从 Kotlin 1.2 开始工作,它支持注释中的数组文字,感谢@BakaWaii)
我得到的是:
类型推断失败。预期类型不匹配:
必需:字符串
成立:
Array<String>
Kotlin 版本:1.1.2-2
kotlin - 覆盖默认构造函数中定义的变量的设置器
所以我有一个看起来像这样的 Kotlin 类:
但是,Android Studio 警告我可以将其用作默认构造函数。当我选择它时,它会将其更改为:
现在我失去了覆盖 setter 的机会,因为如果我创建一个名为的方法,setMyString()
我会得到一个编译器错误。
如果该字段是默认构造函数的一部分,是否有办法覆盖 setter,或者我是否必须使用选项 1 并忽略我收到的警告?