Java에서 타입 지우기 이론에 따르면, 다음 두 코드 조각이 동일한 자바 클래스로 컴파일되어야하므로 동일한 바이트 코드를 가져야한다고 생각합니다.자바 일반 <T> 일반?
public class Generic {
private Object t;
public void hi() {
System.out.println(t);
}
}
javac의 Generic.java
MV Generic.class Generic1.class
public class Generic<T> {
private T t;
public void hi() {
System.out.println(t);
}
}
javac의 Generic.java
MV Generic.class Generic2.class
은 Generic1.class와 Generic2.class를 비교하면 완전히 다릅니다.
내 생각에 무엇이 잘못 되었나요? 그리고 Generic이 바이트 코드를 컴파일하는 방법은 무엇입니까?
[EDIT]
은 javap -v 좋은 팁 감사합니다.
그러나 짧은 시간에 바이트 코드로 세부적인 내용을 이해할 수는 없습니다.
Generic이 T erase to Object로 컴파일되는지 알고 싶습니다.
@ElliottFrisch 당신이 언급 한 그 여분의 캐스트를 보지 못했습니다 - 출력을 'diff'하면 상수 만 제공됩니다 (즉, 해시로 시작하는 것이 맞나요?). 그래도 javap -v를위한 좋은 팁! – Alec