JAVA 泛型的 raw 类型带来的其 【编译时类型检查功能丧失】

定义泛型类对象时,泛型类型若不带 <> ,则默认为<>内的类型下限,或者 Object ,这时,称为使用这个泛型类型的raw 类型。  使用泛型类型的raw类型,会使得泛型类型丧失部分编译类型检查的功能,它可以和本类的任意泛型参数对应的泛型类型进行相互转化,编译只会报warning,不会报error,如下代码所示:


base<String> bstr1=new base<>("liji");
bstr1.print();

base b1=bstr1;
b1.print();

// base<Object> bo1=bstr1;       //这样写会编译报错 ,base<String> 并不是base<Object> 的子类
// base<Integer> bi1=bstr1;      //这样写会编译报错

base<Object> bo1=b1; //这样写只会有一个警告,编译不报错
bo1.print(); //这句运行不会报错

base<Integer> bi1=b1; //这样写只会有一个警告,编译不报错
bi1.print();                //这样,运行也不会报错,我勒个擦!!!


base类定义如下:

public class base<T> {
private T member;
base(T tX)
{
member=tX;
}
public void print()
{
System.out.println("base print :  " + member);
}

}

你可能感兴趣的:(JAVA 泛型的 raw 类型带来的其 【编译时类型检查功能丧失】)