今天在开发时,需要实现根据类型来判断类型是否符合,具体来说,是传入一个Class类的参数,判断该参数是否是指定的类型。上网搜了一下资料,想看看有哪些实现方式,结果发现:
1)同一个ClassLoader加载时,可以根据Class类参数的与指定类的Class类型直接用==相比较:
obj.getClass() == ClassEqualTest.class
既然可以用==符号来判断,当然用equals相比较,肯定也是可以的:
obj.getClass().equals(ClassEqualTest.class)
2)不同的ClassLoader,用==符号判断是不行的。即使是同一个类,表达式的结果也会是false
3)但是不同的ClassLoader加载的同一个类,获取到的Class对象的getName()方法返回的字符串是同一个字符串对象,即用==符号来判断,表达式的结果是true:
MyClassLoader loader = new MyClassLoader();
loader.setRootPath("D://");
Class cls1 = loader.findClass("com.test.A");
Class cls2 = A.class;
System.out.println(cls1.getName()==cls2.getName());
4)甚至不同ClassLoader各自加载的两个类,只要是jvm相同。仅仅是全限定名相同,而包结构不同(如包数量、其他包的包名不同)、类结构不同(如成员变量数量、成员变量名称、方法签名不同),获取到的Class对象的getName返回值所指向的String实例也是同一个。