2016-08-20 2 views
-1

Java에서 제네릭은 형식 지우기를 사용하여 구현된다는 것을 읽었습니다. 나는 그것을 테스트하고 난 완전히 개념을 이해하면보고 싶었다, 그러나 나는이 코드 조각이 완벽하게 작동하는지 알아 놀라게하고 혼란스러워했다 :반사가 일반적인 방법으로 사용되는 이유는 무엇입니까?

public class Test{ 
    public static void main(String []args){ 
     canAssign3(3,3.2); 
    } 

    static<T1,T2> boolean canAssign3(T1 from, T2 to){ 
     Class<?> c1 = from.getClass(); 
     Class<?> c2 = to.getClass(); 
     System.out.println(c1.getName()); 
     System.out.println(c2.getName()); 
     System.out.println(c2.isAssignableFrom(c1)); 
     return (c2.isAssignableFrom(c1)); 
    } 
} 

출력 : 내가

java.lang.Integer 
java.lang.Double 
false 

했다 c1의 클래스와 c2의 클래스는 Object이고, c2.isAssignableFrom(c1)true이 될 것으로 기대하고 있습니다. 여기에 무엇이 누락 되었습니까?

+0

유형 삭제는 컴파일 할 때 발생합니다. –

답변

5

일반 오브젝트이든 아니든, 각 오브젝트에는 클래스가 있으며 호출하는 클래스에 대한 메소드입니다.

이 방법은 두 매개 변수가 모두 Object 인 경우 효과적으로 작동합니다. 실제로 제네릭 유형을 사용하지 않기 때문에 제네릭을 일반화하면 가치가 없습니다.

+0

감사! 제네릭 사용으로 인해 반사 WONT가 작동하는 상황이 있습니까? –

+0

반사는 제네릭보다 훨씬 앞선 것입니다. 리플렉션은 제네릭을 사용하지 않으며 영향을받지 않습니다. – Bohemian

관련 문제