如何通过反射得到类似String 这样的东西呢,另外String 这种属于哪个类型呢,Object,Class,还是? 比如我定义如下一个类: public class A{ public String name; }如果用的时候,得到A对应的Class实例:Class c = A.class; 此时可以通过下面的方式得到name属性:Field f = c.getDeclaredField("name"); 再通过f得到其类型:Type t = f.getGenericType(); 此时可以使用t来和String.class做比较:public class TestType { public static void main(String[] args) throws SecurityException, NoSuchFieldException { Class<A> c = A.class; Field f = c.getDeclaredField("name"); Type t = f.getGenericType(); System.out.println(t.equals(String.class)); }}class A { public String name; }
张三 instanceof 人类 //这是在判断“张三”是不是“人类”这个范畴的一个实例。英语instance :例子,实例。String.class 返回的Class,是从侧面反映了java“万物皆对象”的思想。
Class是对所有定义的“类”的一个抽象:“类”里会有field、method、Constructor等。
不光String里有field、method、Constructor,Integer,甚至Object所有的“类”都有field、method、Constructor(只是有些为null)。因此,我们将所有的“类”,再次抽象成一个“类”(类2),给它定义为Class
2.要用反射实现instanceof 效果可以使用Class的方法isInstance(Object obj),比如说,判断一个对象s是否是String类型的,可以这样写:
String.class.isInstance(s),会返回一个boolean值。
public class A{
public String name;
}如果用的时候,得到A对应的Class实例:Class c = A.class;
此时可以通过下面的方式得到name属性:Field f = c.getDeclaredField("name");
再通过f得到其类型:Type t = f.getGenericType();
此时可以使用t来和String.class做比较:public class TestType { public static void main(String[] args) throws SecurityException, NoSuchFieldException {
Class<A> c = A.class;
Field f = c.getDeclaredField("name");
Type t = f.getGenericType();
System.out.println(t.equals(String.class));
}}class A {
public String name;
}