繁体   English   中英

Eclipse如何创建一个具有未解决的编译问题的类?

[英]How can Eclipse create a class with unresolved compilation problems?

当我尝试用javac编译这个类时,我得到一个编译错误,并且没有创建Test.class。

public class Test {
    public static void main(String[] args) {
        int x = 1L;  // <- this cannot compile
    }
}

但是当我在Eclipse中创建这个类时,我可以看到Test.class出现在target / classes中。 当我尝试使用java.exe从命令行运行此类时,我得到了

线程“main”中的异常java.lang.Error:未解决的编译问题:
类型不匹配:无法从long转换为int

Eclipse是否使用自己的特殊Java编译器来创建损坏的.class? java.exe如何知道.class中的complilation问题?

这就是Java编译器如何知道类中的编译错误。

public static void main(String[] paramArrayOfString)
{
    throw new Error("Unresolved compilation problem: \n\tType mismatch: cannot convert from long to int.\n");
}

如果您对类文件进行反编译,则可以看到编译器生成的类文件的上述main()方法。 这是因为Eclipse使用的编译器Eclipse Compiler for Java )与标准Java编译器不同!

Eclipse使用IBM编译器,它可以选择创建不编译的类,用。替换错误

throw new Error();

恕我直言,这是非常糟糕的做法,我看到一些质量很差的项目使用这个。 该项目一次没有完全编译数周。

与尝试最小化错误成本的失败快速策略不同,尽可能晚地发现错误也会最大化修复它们的成本。

这种策略只有在您快速编写原型代码时才有效,即您知道的代码永远不会投入生产。 (很难确定会出现这种情况)

是的, Eclipse使用自己的特殊编译器; 被称为“ecj”。 来自Stack Overflow问题javac和Eclipse编译器有什么区别?

一个值得注意的区别是Eclipse编译器允许您运行实际上没有正确编译的代码。 如果从未运行带有错误的代码块,则程序运行正常。 否则,它将抛出一个异常,表明您尝试运行无法编译的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM