Evg*_*eev 68 java eclipse compiler-errors
当我尝试用javac编译这个类时,我得到一个编译错误,并且没有创建Test.class.
public class Test {
public static void main(String[] args) {
int x = 1L; // <- this cannot compile
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我在Eclipse中创建这个类时,我可以看到Test.class出现在target/classes中.当我尝试使用java.exe从命令行运行此类时,我得到了
线程"main"中的异常java.lang.Error:未解决的编译问题:
类型不匹配:无法从long转换为int
Eclipse是否使用自己的特殊Java编译器来创建损坏的.class?java.exe如何知道.class中的complilation问题?
Sud*_*hul 64
这就是Java编译器如何知道类中的编译错误.
public static void main(String[] paramArrayOfString)
{
throw new Error("Unresolved compilation problem: \n\tType mismatch: cannot convert from long to int.\n");
}
Run Code Online (Sandbox Code Playgroud)
如果您对类文件进行反编译,则可以看到main()编译器生成的类文件的上述方法.这是因为Eclipse使用的编译器(Eclipse Compiler for Java)与标准Java编译器不同!
Pet*_*rey 41
Eclipse使用IBM编译器,它可以选择创建不编译的类,用.替换错误
throw new Error();
Run Code Online (Sandbox Code Playgroud)
恕我直言,这是非常糟糕的做法,我看到一些质量很差的项目使用这个.该项目一次没有完全编译数周.
与尝试最小化错误成本的失败快速策略不同,尽可能晚地发现错误也会最大化修复它们的成本.
这种策略只有在您快速编写原型代码时才有效,即您知道的代码永远不会投入生产.(很难确定会出现这种情况)
Eri*_*ert 26
是的,Eclipse使用自己的特殊编译器; 被称为"ecj".来自Stack Overflow问题javac和Eclipse编译器有什么区别?:
一个值得注意的区别是Eclipse编译器允许您运行实际上没有正确编译的代码.如果从未运行带有错误的代码块,则程序运行正常.否则,它将抛出一个异常,表明您尝试运行无法编译的代码.
| 归档时间: |
|
| 查看次数: |
6088 次 |
| 最近记录: |