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 컴파일러를 사용하면 실제로 제대로 컴파일되지 않은 코드를 실행할 수 있다는 것입니다. 오류가있는 코드 블록이 실행되지 않으면 프로그램이 정상적으로 실행됩니다. 그렇지 않으면 컴파일되지 않는 코드를 실행하려고 시도했음을 나타내는 예외가 발생합니다.
'Programing' 카테고리의 다른 글
postgresql의 Rownum (0) | 2020.11.08 |
---|---|
Backbone.js 컬렉션에서 fetch ()를 호출하면 어떤 이벤트가 트리거됩니까? (0) | 2020.11.08 |
Android 5.0 (L) 서비스 의도는 Google 애널리틱스에서 명시 적이어야합니다. (0) | 2020.11.08 |
인터페이스의 TypeScript 선택적 기능 (0) | 2020.11.08 |
Vue.js : 서비스 정의 (0) | 2020.11.08 |