Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获得;“不兼容类型”;使用从Kotlin数据类生成的代码时出错_Java_Kotlin - Fatal编程技术网

Java 获得;“不兼容类型”;使用从Kotlin数据类生成的代码时出错

Java 获得;“不兼容类型”;使用从Kotlin数据类生成的代码时出错,java,kotlin,Java,Kotlin,如果我反编译由数据类状态(val b:List)生成的.class文件,那么我会得到以下Java代码: public final class State { private final List<? extends Integer[]> b; public State(List<? extends Integer[]> b) { this.b = b; } public final List<Integer[]>

如果我反编译由
数据类状态(val b:List)
生成的.class文件,那么我会得到以下Java代码:

public final class State {
    private final List<? extends Integer[]> b;

    public State(List<? extends Integer[]> b) {
      this.b = b;
    }

    public final List<Integer[]> getB() {
      return this.b;
    }

    // ...
}

我错过了什么?Kotlin生成的代码如何做到这一点而不是我的复制/粘贴版本?

通常,当javac加载.class文件时,它不会对该类中的代码执行完整的类型检查;它将信任字节码中指定的通用签名。因此,其他JVM语言可以生成javac本身拒绝生成的签名

在这种特定情况下,Kotlin beta 4生成的通配符毫无意义(
Integer[]
是最终类,因此
?extends Integer[]
是无用的),因此当前开发版本在本例中不生成任何通配符


更一般地说,我们的目标是确保用Kotlin编写的API易于从Java代码中使用,为了实现这一点,Kotlin允许您控制它在何处生成通配符。这在“Java通配符”中有描述。

您使用的是什么Kotlin版本?
Incompatible types.

Required: List<Integer[]>
Found:    List<? extends Integer[]>