2014-10-14 3 views
0

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가 표시되지 않습니다.

+0

왜 부정적인가요? 왜 출력이 허버트 (Herbert)가 제공 한 것과 다른지에 대한 대답을 물었습니다. –

+0

Herbet Schildt가 제공 한 결과를 게시하지 않는 한 질문은 책을 소지 한 사람들 만 대답 할 수 있습니다. – EJP

+0

@EJP : 사람들이 질문을 제대로 통과하지 못하면 어떻게해야합니까? 그것은 처음부터있었습니다. –

답변

4

번호는 사람들은 javap -c의 실행 결과이다 "이러한 파일에 이클립스은 javap를 실행 한 후, 내 결과는 ...입니다".

6: putfield  #16     // Field str:Ljava/lang/String; 

표시되지 않습니까?

1: getfield  #16     // Field str:Ljava/lang/String; 

또는 그 것?

+0

왜 T는 아직도 그곳에 있습니까? 그리고 출력의 차이가 많습니다. –

+0

@ShirgillAnsari (1)은 메소드 서명이기 때문에 (2) 그것이 ''과' '의 차이점이기 때문에. 이 것들. 네가 주장한 것들은 존재하지 않았다. 당신의 마음을 확인하십시오. 그들은 거기에 있거나 그렇지 않습니다. – EJP

+0

내 프로그램 사이에 있지 않습니다. 허버트와 나입니다. –

관련 문제