对于带泛型的实体,会有两个问题困扰我们,第一:如何获取泛型的类型,第二:如何实例化带泛型的实体类。
第一个问题可以先看代码:
class A{
private String name;
public String getName(){return this.name;}
public void setName(String name){this.name = name;}
public String toString(){return "A{'name':"+this.name+"}";}
}
class B<T,PK extends Serializable>{
Class<T> ref;
public B(){
Class c = getClass();
Type type = c.getGenericSuperclass();
if(type instanceof ParameterizedType){
Type[] paramsType = ((ParameterizedType) type).getActualTypeArguments();
ref = (Class<T>) paramsType[0];
}
}
public String getRefType(){
return ref.getName();
}
}
这里我考虑A作为普通类,B作为带泛型A的普通类,这样,我们需要在B中获取类型A,核心代码在B的构造函数中。
针对第二个问题,如何实例化带泛型参数的实体类,最初我简单的以为可以使用如下代码
这样的结果是报空指针。后来通过用实体C来继承B,类似实例化C,就好了,不报空指针,如下图。
运行结果如图:
这种采用继承来实例化带泛型的方法其实在实际中使用的更多,但是这还不是我最想要的实例化方法,难道就不能直接实例化B吗,直到我看到了另外一篇文章,对带泛型的实体实例化采用了这样的代码。
GenericTest<String> test = new GenericTest<String>(){};这样对实体B的实例化就很清楚了。直接上截图。
对带泛型的实体类实例化和普通实体实例化不同,后面还需加上"{}"。