Programing

Eclipse는 해결되지 않은 컴파일 문제가있는 클래스를 어떻게 만들 수 있습니까?

lottogame 2020. 11. 8. 09:07
반응형

Eclipse는 해결되지 않은 컴파일 문제가있는 클래스를 어떻게 만들 수 있습니까?


이 클래스를 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.Error의 예외 : 해결되지 않은 컴파일 문제 :
유형 불일치 : long에서 int로 변환 할 수 없음

Eclipse는 자체 특수 Java 컴파일러를 사용하여 손상된 .class를 생성합니까? java.exe는 .class의 컴파일 문제에 대해 어떻게 알 수 있습니까?


이것이 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가 사용 하는 컴파일러 ( Java 용 Eclipse 컴파일러 )가 표준 Java 컴파일러와 동일하지 않기 때문입니다 !


Eclipse는 컴파일되지 않는 클래스를 생성하고 오류를 다음으로 대체하는 옵션이있는 IBM 컴파일러를 사용합니다.

throw new Error();

IMHO, 이것은 매우 나쁜 관행이며 매우 낮은 품질의 프로젝트에서 이것을 사용하는 것을 보았습니다. 프로젝트는 한 번에 몇 주 동안 완전히 컴파일되지 않았습니다.

버그 비용을 최소화하려는 Fail Fast 전략과 달리 가능한 한 늦게 버그를 발견하면 버그 수정 비용도 최대화됩니다.

이 전략은 프로토 타입 코드를 빠르게 작성하는 경우에만 작동합니다. 즉, 아는 코드는 생산에 들어 가지 않습니다. (이것이 사실인지 확신하기 어렵습니다)


예, Eclipse 는 자체 특수 컴파일러를 사용합니다. "ecj"로 알려져 있습니다. 스택 오버플로 질문 에서 javac와 Eclipse 컴파일러의 차이점은 무엇입니까? :

한 가지 주목할만한 차이점은 Eclipse 컴파일러를 사용하면 실제로 제대로 컴파일되지 않은 코드를 실행할 수 있다는 것입니다. 오류가있는 코드 블록이 실행되지 않으면 프로그램이 정상적으로 실행됩니다. 그렇지 않으면 컴파일되지 않는 코드를 실행하려고 시도했음을 나타내는 예외가 발생합니다.

참고 URL : https://stackoverflow.com/questions/16394152/how-can-eclipse-create-a-class-with-unresolved-compilation-problems

반응형