为什么发布的Java源代码中有错误?

马克斯·扬科夫(Max Yankov):

我下载了JDK源代码(6u23构建b5)用于研究,Eclipsed决定自动构建它。令人惊讶的是,它发现了错误。

一些例子。

java.beans.MetaData,第1365行:

ConstructorProperties annotation = constructor.getAnnotation(ConstructorProperties.class);

类型不匹配:无法从注释转换为ConstructorProperties

java.awt.AWTEvent,第220行:

AWTAccessor.setAWTEventAccessor(new AWTAccessor.AWTEventAccessor() {

新类型AWTAccessor.AWTEventAccessor(){}必须实现继承的抽象方法AWTAccessor.AWTEventAccessor.getAccessControlContext(AWTEvent)

我认为这段代码应该是绝对正确的,即使它不是可以从中学习的最佳Java用法示例之一。但这还没有编译!

更新:我将Java包导出到单个项目中,删除了Java包默认导入,以避免可能的命名空间冲突,并使用JVM 1.6.0对其进行了构建。

彼得·劳瑞:

您在这里遇到的问题是泛型规范随着时间的推移而发展。:| 最新版本的Sun / Oracle Java可以正确编译此代码,但是现在可以编译未实现的IDE。(不幸的是,Eclipse使用其自己的编译器,并且并不总是与Sun / Oracle编译器完全相同)。

我敢肯定,较早版本的编译器会对这行代码产生错误。

过去曾经是,如果类型不是泛型,则所有泛型都将关闭,即使这没有任何意义。在这种方法的情况下。

public <T extends Annotation> T getAnnotation(Class<T> annotationClass) 

// constructor is not a generic type.
private static String[] getAnnotationValue(Constructor constructor) {
        ConstructorProperties annotation = constructor.getAnnotation(ConstructorProperties.class);

较早的编译器会假定这是一个非泛型方法,因为构造方法不是泛型的。但是,较新的编译器会将此方法标识为自包含的,并且该类是否为泛型类型都没有关系。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Eclipse中,当所有Java源代码编译时都没有错误时,什么会导致Package Explorer出现“ red-x”错误图标?

为什么导入javax.servlet。*中有错误?

为什么此代码可以编译直至C ++ 17且没有错误?

为什么此代码在C ++ 17中编译时没有错误?

为什么下面的代码编译没有错误?

为什么下面的代码编译时没有错误?

为什么wix项目中有错误?

为什么C标准允许此代码编译时没有错误?

为什么`cargo build`不能在我的代码中显示所有错误?

为什么在Python中有关带有标签的句柄有错误?

为什么我的文件代码有错误?

为什么在VsCode git中有两个源代码控件?

为什么subprocess.run返回退出代码2,但日志中没有错误?

为什么以下Java代码中有错误?

为什么这行Java代码有错误?

为什么此列表有错误?

为什么批处理脚本在没有错误代码的情况下崩溃?

为什么我的.bashrc有错误?

代码中有什么错误?

Switch.java在android studio中有错误

为什么此代码有错误?

我在R.java中有错误?

为什么我有错误的输出java headfirst?

为什么我在此代码中收到“您的 SQL 语法有错误”错误?

为什么我的 C++ 编译的 Windows .exe 中有 .h 源代码?

我现在没有,为什么我在这个 sql 请求中有错误

为什么我的 vba 代码中有“错误 424”?

Windows 10中的文件ini_set在哪里我为什么在这个脚本中有错误

Google kickstart 2022 为什么我的代码第 11 行有错误