在泛型应用中最好在声明类对象时制定好其内部数据类型,如Info,如果不指定类型,这样用户在使用这样的类时,就会出现不安全操作的警告信息。
【不指定泛型类型】
class Info<T>
{
private T var;
public T getVar(){
return var;
}
public void setVar(T var){
this.var=var;
}
public String toString(){
return this.var.toString();
}
};
public class GenericsDemo10
{
public static void main(String args[])
{
Info i=new Info();
i.setVar("张三");
System.out.println("姓名:"+i.getVar());
}
}
编译时出现警告信息:
注: GenericsDemo10.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
因为程序在使用类时没有指定其泛类型,但是并不影响程序的运行,这是因为在泛型的操作中为了方便用户的使用,就算没有指定泛型类型程序也可以正常使用,为所有的类型统一使用Object进行接收,所以以上程序的var属性实际上就变成了Object类型,也就是在定义时将泛型擦除了,以上程序类似于以下的定义。
【使用Object声明泛型类型】
public class GenericsDemo11
{
public static void main(String args[])
{
Info<Object> i=new Info<Object>();
i.setVar("张三");
System.out.println("姓名:"+i.getVar());
}
}
运行结果:
姓名:张三
以上程序本身并没有什么意义,因为就算不设置泛型也是Object,但这样做的唯一好处就是,在编译时警告信息消失了。