标签:title cat 转换 产生 src tle rgs double col
类名.class 就是字面常量,代表的就是该类的Class对象引用。常量需要赋值给变量
System.out.println(int.class); //int System.out.println(Integer.TYPE); //int System.out.println(Integer.class); //class java.lang.Integer
二.泛化的Class引用
1.普通的类引用可以重新指向任何其它的Class对象,使用泛型类引用只能赋值为指向其声明的类型,除外使用通配符?
Class intClass = int.class; Class<Integer> genericIntClass = int.class; Class<?> i = int.class; i = double.class; genericIntClass = Integer.class; // Same thing intClass = double.class;
2.Class<?> 优于Class 因为Class在编译期不会产生警告,而Class<?>当指向一个非具体的类引用时会产生警告
3.a.newInstance()如果Class引用a不是泛型引用,在编译期就不知道它会返回什么类型那么只能返回Object。
Class a = A.class; Object t = a.newInstance(); //A t = (A) a.newInstance();//无法确定类型需要强制转换 System.out.println(t.getClass().getName());//thinking14class.A
4.a.newInstance() a 是泛型引用并且能确定类型则会返回确切的类型。
Class <A> a= A.class; Class <? extends C> c= C.class; //上界 Class <? super A> d= A.class; A ta = a.newInstance(); // 可以确定 A tc = c.newInstance(); // 上界至少它是一个C可以确定
5. a.newInstance() a 是泛型引用但不能确定类型则只能返回Object。
Class <A> a= A.class; Class <? extends C> c= C.class; //上界 Class <? super A> d= A.class; //下界 //A ta = a.newInstance(); // 通配符无法确定 A tc = c.newInstance(); // 上界至少它是一个C可以确定 //A td = d.newInstance();// 下界无法确定
6. 利用Class类的cast()方法来转换类型
class Building {}
class House extends Building {}
public class ClassCasts {
public static void main(String[] args) {
Building b = new House();
Class<House> houseType = House.class;
House h = houseType.cast(b);
h = (House)b; // ... or just do this.
}
} ///:~
fd
标签:title cat 转换 产生 src tle rgs double col
原文地址:https://www.cnblogs.com/jiangfeilong/p/10353988.html