2013-08-13 2 views
4

다음은 런타임시 클래스를 리플렉션 API라고 부르는 작은 코드입니다. 그러나 의도 한 결과가 나타나지 않습니다..class == getClass() 테스트가 실패합니다.

public class Outer { 
    public Outer(){ 
     System.out.println("Outer Class"); 
    } 
    public class Inner { 
     public Inner(){   
      System.out.println("Inner Class"); 
     } 
    } 
} 

또한 여기에 내가 코드를 실행하고 테스트하기 위해 쓴 주요 기능은 ... 시험은 다음과 같은 오류와 함께 실패

public class ClassTest { 

    public static void main(String[] args) { 

     Outer outObj = new Outer(); 
     Outer.Inner inObj = outObj.new Inner(); 

     // Using Reflection 
     Class objTyp = inObj.getClass(); 
     System.out.println(objTyp.getName()); 

     //Testing Reflection 
     if(objTyp.getClass() == Outer.Inner.class){ 
      System.out.println("Match classes!"); 
     }else{ 
      System.out.println("Mismatch classes!"); 
     } 
    } 
} 

:

if(objTyp.getClass() == Outer.Inner.class){ ^ where CAP#1 is a fresh type-variable: CAP#1 extends Class from capture of ? extends Class 1 error

여기에 코드입니다

코드를 수정하는 데 도움을주십시오. 내가 뭘 놓치고 있니? 감사.

+1

'Outer.Inner.class'와'objType.getClass()'가 아닌'objType'을 비교해야합니다. –

+1

@boxed__l'Outer.Inner.class'는 클래스 리터럴이므로 ==가 작동해야합니다. –

+0

@ArnaudDenoyelle 동의 함 ... getName()은 문자열 리터럴 –

답변

7

objTyp 대신 Outer.Inner.classobjTyp.getClass()을 비교합니다.

  • objTypClass<Outer.Inner>입니다.
  • objTyp.getClass()Class<Class<Outer.Inner>>입니다.
  • Outer.Inner.classClass<Outer.Inner> 유형의 클래스 리터럴입니다.

따라서 objTyp.getClass()Outer.Inner.class과 같을 기회가 없습니다.

Outer outObj = new Outer(); 
    Outer.Inner inObj = outObj.new Inner(); 

    // Using Reflection 
    Class objTyp = inObj.getClass(); 
    System.out.println(objTyp.getName()); 

    // >>>>> objTyp is already inObj.getClass() <<<<<< 
    if(objTyp.getClass() == Outer.Inner.class){ 
     System.out.println("Match classes!"); 
    }else{ 
     System.out.println("Mismatch classes!"); 
    } 
+0

+1 큰 걸음을 반환합니다! – sanbhat

+0

'Class >'는'Object' 기본 클래스를 반환하지 않으며 테스트는'Mismatch classes! '를 출력하지 않아야합니까? –

+0

다른 유형의 객체 ('Class >>'vs'Class >)에 ==를 사용할 수 없기 때문에 컴파일되지 않습니다. 'List 'vs'List '을 비교하려고 할 때도 같은 오류가 발생합니다. –

관련 문제