Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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 为什么此方法引用在运行时失败,而不是相应的lambda调用?_Java_Eclipse - Fatal编程技术网

Java 为什么此方法引用在运行时失败,而不是相应的lambda调用?

Java 为什么此方法引用在运行时失败,而不是相应的lambda调用?,java,eclipse,Java,Eclipse,我有这两个接口。一个是公共(A),另一个是包专用(AA)A扩展AA package pkg.a; @FunctionalInterface public interface A extends AA { } 我有以下代码(在另一个包中): 在某些Java版本中,这似乎是一个bug 如果我用JDK 8编译并运行它,我可以复制它,特别是: tj$ javac -version javac 1.8.0_74 tj$ java -version java version "1.8.0_74" J

我有这两个接口。一个是公共(A),另一个是包专用(AA)<代码>A扩展
AA

package pkg.a;

@FunctionalInterface
public interface A extends AA {

}

我有以下代码(在另一个包中):


在某些Java版本中,这似乎是一个bug

如果我用JDK 8编译并运行它,我可以复制它,特别是:

tj$ javac -version javac 1.8.0_74 tj$ java -version java version "1.8.0_74" Java(TM) SE Runtime Environment (build 1.8.0_74-b02) Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode) tj$ javac -version javac 11.0.1 tj$ java -version openjdk version "11.0.1" 2018-10-16 OpenJDK Runtime Environment 18.9 (build 11.0.1+13) OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode) tj$javac-版本 JavaC1.8.0_74 tj$java-版本 java版本“1.8.0_74” Java(TM)SE运行时环境(build 1.8.0_74-b02) Java HotSpot(TM)64位服务器虚拟机(构建25.74-b02,混合模式) …但不适用于JDK 11或12,特别是:

tj$ javac -version javac 1.8.0_74 tj$ java -version java version "1.8.0_74" Java(TM) SE Runtime Environment (build 1.8.0_74-b02) Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode) tj$ javac -version javac 11.0.1 tj$ java -version openjdk version "11.0.1" 2018-10-16 OpenJDK Runtime Environment 18.9 (build 11.0.1+13) OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode) tj$javac-版本 JavaC11.0.1 tj$java-版本 openjdk版本“11.0.1”2018-10-16 OpenJDK运行时环境18.9(构建11.0.1+13) OpenJDK 64位服务器VM 18.9(构建11.0.1+13,混合模式) 及

tj$javac-版本 JavaC12.0.2 tj$java-版本 java版本“12.0.2”2019-07-16 Java(TM)SE运行时环境(构建12.0.2+10) Java HotSpot(TM)64位服务器虚拟机(构建12.0.2+10,混合模式,共享) 如果我使用JDK 8编译,但使用JDK 12的运行时运行它,我也可以复制它,这表明存在编译问题。

这是一个bug:

对包访问类中声明的方法的引用(通过 公共子类型)编译为lambda桥;中的限定类型 桥方法是声明类,而不是引用类。 这将导致一个非法的AccessError


在Java 9中修复。

这是一个非常好的问题。它有一个错误(即使在JDK 8中也会复制错误),很明显。。。很高兴见到你@AndrewTobilko—它可以编译,但不能运行(对于我来说,JDK 8[我手头的东西],特别是1.8.074,使用“Java HotSpot(TM)64位服务器VM(build 25.74-b02,混合模式)”)。“线程”main“java.lang.IllegalAccessError:尝试从类pkg.Test访问类pkg.a.AA”中的“异常”使用“openjdk 64位服务器VM 18.9(构建11.0.1+13,混合模式)”在“openjdk版本”11.0.1“2018-10-16”中为我运行。听起来像是一个已经修复的bug。使用Java版本更新了问题。将尝试使用更高版本的java并报告。这似乎与(从2015年开始…)相同,并且javac中有一些相关问题与此相关。 tj$ javac -version javac 11.0.1 tj$ java -version openjdk version "11.0.1" 2018-10-16 OpenJDK Runtime Environment 18.9 (build 11.0.1+13) OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode) tj$ javac -version javac 12.0.2 tj$ java -version java version "12.0.2" 2019-07-16 Java(TM) SE Runtime Environment (build 12.0.2+10) Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)