有帮助的话对Micro极微完美女装品牌店淘宝店支持支持包
我们知道泛型代码在运行时是没有类型信息,擦除丢失了类型信息使得泛型代码执行过程中缺少执行某些操作的能力(任何在运行时需要知道确切类型信息的操作都无法执行,补偿只是在边界也就是传出去的时候才进行类型转换)。既然无法知道类型信息就无法创建类的实例,那我们应该怎么办。
我所知道的有三种方式,而我则将给大家用代码展示其中的一种情况:
1、创建实例工厂为其返回类型信息。
2、创建显示的工厂为其返回类型信息
//这个时候t是没有类型信息的
class Foo<T>{
T t;
}
//下面的例子中使得t具有Integer类型
class Foo<T>{
T t;
public <F> Foo(F fa){
t= fa.creat();
}
}
......
Integer creat(){
return new Integer(0);
}
3、模板方法设计模式
我们在不改变代码整体架构的基础上,只需要在赋予类型信息的时候进行编码即可。
//在这个代码运行过程中t也是没有类型信息的,那我们通过构造方法初始化时为泛型t进行赋予。
public abstract class GenericGreate<T> {
T t;
GenericGreate(){
t= create();
}
abstract T create();
}
//下面是我们在市级中用到的类,让其继承GenericGreate,并在子类中对create方法进行重写
public class Creator extends GenericGreate {
@Override
Object create() {
return new String();
}
public void f(){
System.out.println(super.t.getClass().getName());
}
public static void main(String[] args) {
new Creator().f();
}
}
//经过第二步的操作我们就为t赋予String类型的类型信息,t就具有String的操作
控制台打印结果
============================================================
java.lang.String
经过上面的学习我们应该清楚的知道泛型代码在没有类型信息的时候我们应该怎么人为的为其赋予想要的类型