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

2022-08-31 14:30:49

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

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

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

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

Eclipse是否使用自己特殊的Java编译器来创建一个破碎的.class?java.exe如何了解.class中的压缩问题?


答案 1

这就是 Java 编译器了解类中编译错误的方式。

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

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


答案 2

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

throw new Error();

恕我直言,这是非常糟糕的做法,我见过一些质量很差的项目使用它。该项目在几周内没有完全编译。

与试图最大限度地降低错误成本的快速失败策略不同,尽可能晚地发现错误也可以最大限度地提高修复它们的成本。

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


推荐