问题标签 [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.

0 投票
3 回答
4811 浏览

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 扩展功能,但这只能解决这种特殊情况。我需要知道一个通​​用的解决方案。

0 投票
6 回答
7738 浏览

kotlin - while 表达式中不允许赋值?

while在 Java 中,我们通常可以在条件内执行赋值。然而,Kotlin 抱怨它。所以下面的代码无法编译:

根据this other thread,这似乎是最好的解决方案:

但是是吗?

0 投票
0 回答
60 浏览

java - 从 Kotlin 对象中的接口访问字段

我已经开始将我的一些代码从 Java 转换为 Kotlin。

其中一些是数据库模式类,包含不同列名的常量(我在这里使用 Android)。

我已经final classstatic常量修改了我的 Java,因此它是objectKotlin 中的常量(const):

}

Android中的BaseColumns类基本上是这样的:

但是,此代码现在无法编译:

未解决的参考:_ID

这对我来说没有意义,因为MySchema实现了BaseColumns接口,因此应该继承它的字段。

在我将数据库模式类转换为 Kotlin 之前,未编译的代码能够编译 - 即:

我希望这是有道理的。

我在这里做错了什么?

0 投票
2 回答
2815 浏览

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) :

反编译:

0 投票
1 回答
4619 浏览

android - 使用新的 kotlin 1.1 构建错误,kapt 无法解析数据绑定参数

我将我的项目从 android studio 2.2 更新到 android studio 2.3 并将项目从 kotlin 1.06 增加到 kotlin 1.1

这是我得到的错误

build.gradle文件:

0 投票
1 回答
9487 浏览

java - 将 Thread/Runnable 实现从 Java 转换为 Kotlin

我有一个现有的 Java 类ThreadUtils,其方法every如下:

我正在尝试将其转换为 Kotlin。我对 Runnable 关闭有点犹豫。这失败了一个坏的return

我还尝试将 Runnable 拉出来只是为了帮助自己分离事物,但这也以同样的方式失败:

如何实现一个@FunctionalInterface或类似样式的闭包/ lambda,它不尝试return 定义它的函数中获取?

0 投票
4 回答
5206 浏览

android - 无法使用 RxKotlin 'observeOn' 主线程

我正在尝试使用以下方法在主线程上观察 observable:

但我收到以下错误:

我订阅的 Observable 来自一个用 Java 编写的库,因此使用了 RxJava。

我是不是很愚蠢,错过了什么?我很困惑:$

提前致谢 :)

0 投票
2 回答
718 浏览

java - Kotlin java 抽象类 IllegalAccessError

我遇到了 java interop 和 Kotlin 的问题我有一个包保护的 java 抽象类,AbstractTest它被用作另一个类的成员,TestHolder。当我创建抽象类的派生实例Test并尝试在 kotlin 中使用它时,我得到:

java.lang.IllegalAccessError:试图从 KotlinTest 类访问类 test.AbtractTest

相同代码的 Java 版本似乎可以正常工作...

0 投票
4 回答
10213 浏览

kotlin - Kotlin:如何将数组传递给 Java 注释

我想使用@OneOf注释package io.dropwizard.validation;

Java用法:

Kotlin 用法:???

我试过这个:

和这个:

(编辑:这个例子从 Kotlin 1.2 开始工作,它支持注释中的数组文字,感谢@BakaWaii)

我得到的是:

类型推断失败。预期类型不匹配:

必需:字符串

成立:Array<String>

Kotlin 版本:1.1.2-2

0 投票
1 回答
1330 浏览

kotlin - 覆盖默认构造函数中定义的变量的设置器

所以我有一个看起来像这样的 Kotlin 类:

但是,Android Studio 警告我可以将其用作默认构造函数。当我选择它时,它会将其更改为:

现在我失去了覆盖 setter 的机会,因为如果我创建一个名为的方法,setMyString()我会得到一个编译器错误。

如果该字段是默认构造函数的一部分,是否有办法覆盖 setter,或者我是否必须使用选项 1 并忽略我收到的警告?