[英]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.