Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

.class == getClass() test fails

Here's a small code I wrote to check the (is it called reflection API? not sure) classes at runtime, however I am not getting the intended results. Here is the code:

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

Also here is the main function that I wrote to run the code and test it...

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!");
        }
    }
}

The test fails with the following error:

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

Please help me to correct the code. What am I missing? Thanks.

like image 671
Anurupa_Dey Avatar asked Mar 23 '23 19:03

Anurupa_Dey


1 Answers

You are comparing Outer.Inner.class with objTyp.getClass() instead of objTyp.

  • objTyp is of type Class<Outer.Inner>.
  • objTyp.getClass() is of type Class<Class<Outer.Inner>>.
  • Outer.Inner.class is a class literal of type Class<Outer.Inner>.

Hence, objTyp.getClass() has no chance to equal 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!");
    }
like image 186
Arnaud Denoyelle Avatar answered Mar 31 '23 11:03

Arnaud Denoyelle