平时开发中很多Class的方法都用不上,最近在看spring源码的时候,发现里面一些类型转换部分的代码(Converter等)用到很多Class的方法。经过自己尝试使用,这里将用途记录下,方便以后查阅:
1. getComponentType
获取数组(该class为数组)中实际存放的类型;如果该class不是数组,则直接返回null
System.out.println(new int[0].getClass().getComponentType()); // int
System.out.println(new String[0].getClass().getComponentType()); // class java.lang.String
System.out.println(String.class.getComponentType()); // null
2. isAssignableFrom
判断当前对象是否为传入参数的父类或者父接口
结合下面的例子进行理解:Number是Integer的父类,Object是Integer的父类,CharSequence是String的父接口
System.out.println(Number.class.isAssignableFrom(Integer.class)); // true
System.out.println(Object.class.isAssignableFrom(Integer.class)); // true
System.out.println(CharSequence.class.isAssignableFrom(String.class)); // true
3. getGenericInterfaces
获取当前class直接实现的接口,结果是Type类型的数组
举例:
e.g.1 ArrayList实现了List,RandomAccess,Cloneable,Serializable四个接口,调用后就返回这四个接口class构成的数组
对这个例子补充说明下:(1) 有一个接口比较特殊,List是带有泛型的,返回的是ParameterizedTypeImpl,而不是Class(Class和ParameterizedType都是Type的实现类)
(2)List又继承了Collection接口,但是不在返回结果之中,这就是前面说“直接实现的接口”的原因
e.g.2 Object没有实现任何接口,直接返回Class[0]
Type[] types = String.class.getGenericInterfaces();
Type[] types2 = ArrayList.class.getGenericInterfaces();
Type[] types3 = List.class.getGenericInterfaces();
Type[] types4 = Object.class.getGenericInterfaces();
System.out.println(types + "" + types2 + "" + types3 + "" + types4);