什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,
早期定义Object来完成扩展(多态)。
当类中要操作的引用数据类型不确定的时候,
早期定义Object来完成扩展(多态)。
现在定义泛型来完成扩展。
使用Object的做法
public class Tool
{//泛型出现前的用法,用Object引用指向子类对象,即多态的方法
private Object obj;
public void setObject(Object obj)
{
this.obj=obj;
}
public Object getObject()
{
return obj;
}
}
public class WorkerClass
{
public void show()
{
System.out.println("Worker");
}
}
public class StudentClass
{
public void show()
{
System.out.println("Student");
}
}
public class BenericClassDemo
{
public static void main(String[] args)
{
Tool T=new Tool();
T.setObject(new StudentClass());
<span style="color:#ff0000;">StudentClass S=(StudentClass)T.getObject();</span>
S.show();
}
}
但是使用Object接收对象后,一个严重问题就是多态使得父类引用不能调用子类对象的特有方法!想调用子类对象特有方法的话,需要进行类型强制转换,即向下转型!
使用泛型接收,修改部分代码如下:
public class ToolGeneric <span style="color:#ff0000;"><myType></span>
{//使用泛型后,用任意书写额myType接收任意类型的对象,
private <span style="color:#ff0000;">myType</span> obj;
public void setMyType(<span style="color:#ff0000;">myType </span>obj)
{
this.obj=obj;
}
public <span style="color:#ff0000;">myType</span> getMyType()
{
return obj;
}
}
public class BenericClassDemo
{
public static void main(String[] args)
{
ToolGeneric<StudentClass> T=new ToolGeneric<StudentClass>();
T.setMyType(new StudentClass());
//T.setMyType(new WorkerClass());
<span style="color:#ff0000;">StudentClass S=T.getMyType();</span>
S.show();
}
}
其中myType是任意规定,人为设置的一个泛型,即表示可以接收任意类型的对象,其可以书写成你想要表达的意思,没有固定限制!其实际含义根据你传进来的对象而自动更改!因此避免了强制转换!