Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can Eclipse create a class with unresolved compilation problems?

When I try to compile this class with javac, I get a compilation error and Test.class is not created.

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

But when I create this class in Eclipse, I can see that Test.class appears in target/classes. When I try to run this class from command line with java.exe, I get

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from long to int

Does Eclipse use its own special Java compiler to create a broken .class? How does java.exe know about complilation problems in .class?

like image 232
Evgeniy Dorofeev Avatar asked May 06 '13 07:05

Evgeniy Dorofeev


People also ask

What does unresolved compilation problem mean in Java?

Introduction. Unresolved compilation problems in the code are due to compilation errors in the code. Many problems can be detected if we use an IDE like IntelliJ, Eclipse IDE, etc. This is a very generic error and there could be multiple reasons to get this error.


2 Answers

This is how the Java compiler knows about the compilation error in the class.

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

If you decompile your class file, you can see the above main() method of the class file, which the compiler has generated. This is because of the compiler which Eclipse uses (Eclipse Compiler for Java) is not the same as the standard Java compiler!

like image 74
Rahul Avatar answered Oct 06 '22 01:10

Rahul


Eclipse uses the IBM compiler which has an option of creating classes which do not compile, replacing errors with

throw new Error(); 

IMHO, this is very bad practice and I have seen some very poor quality projects use this. The project didn't compile completely for weeks at a time.

Unlike fail fast strategies, which try to minimise the cost of bugs, discovering bugs as late as possible also maximises the cost of fixing them.

This strategy only works if you are writing prototype code quickly, i.e. code you know will never get into production. (It is hard to be sure this will be the case)

like image 37
Peter Lawrey Avatar answered Oct 06 '22 00:10

Peter Lawrey