Java의 Herbert Schildt 저서 요약Java Generics에서 지우기
이 두 클래스가 컴파일 된 후 Gen의 T는 Object로 대체됩니다. GenStr의 T는 String으로 대체됩니다.
컴파일 된 클래스에서 javap를 실행하여이를 확인할 수 있습니다. 결과는 여기에 표시됩니다.
편집 : 위의 두 가지는 허버트 북의 출력물입니다.
//Here, T is bound by Object by default.
class Gen<T> {
T ob; // here, T will be replaced by Object
Gen(T o) {
ob = o;
}
// Return ob.
T getob() {
return ob;
}
}
//Here, T is bound by String.
class GenStr<T extends String> {
T str; // here, T will be replaced by String
GenStr(T o) {
str = o;
}
T getstr() {
return str;
}
}
이 파일에 이클립스은 javap를 실행 한 후, 내 결과는 다음과 같습니다
class erasure.Gen<T> {
T ob;
erasure.Gen(T);
Code:
0: aload_0
1: invokespecial #13 // Method java/lang/Object."<init>":()V
4: aload_0
5: aload_1
6: putfield #16 // Field ob:Ljava/lang/Object;
9: return
T getob();
Code:
0: aload_0
1: getfield #16 // Field ob:Ljava/lang/Object;
4: areturn
}
및 GenStr.java을 위해 :
이class erasure.GenStr<T extends java.lang.String> {
T str;
erasure.GenStr(T);
Code:
0: aload_0
1: invokespecial #13 // Method java/lang/Object."<init>":()V
4: aload_0
5: aload_1
6: putfield #16 // Field str:Ljava/lang/String;
9: return
T getstr();
Code:
0: aload_0
1: getfield #16 // Field str:Ljava/lang/String;
4: areturn
}
문제는 내가 출력 등을받지 오전 Herbert Schildt는 언급합니다. 위 시나리오에서 Object 또는 String 클래스로 대체되는 T가 표시되지 않습니다.
왜 부정적인가요? 왜 출력이 허버트 (Herbert)가 제공 한 것과 다른지에 대한 대답을 물었습니다. –
Herbet Schildt가 제공 한 결과를 게시하지 않는 한 질문은 책을 소지 한 사람들 만 대답 할 수 있습니다. – EJP
@EJP : 사람들이 질문을 제대로 통과하지 못하면 어떻게해야합니까? 그것은 처음부터있었습니다. –