java带泛型的实体类

时间:2022-05-03 19:23:17

          对于带泛型的实体,会有两个问题困扰我们,第一:如何获取泛型的类型,第二:如何实例化带泛型的实体类。

第一个问题可以先看代码:

    

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的构造函数中。

     针对第二个问题,如何实例化带泛型参数的实体类,最初我简单的以为可以使用如下代码

    java带泛型的实体类

    这样的结果是报空指针。后来通过用实体C来继承B,类似实例化C,就好了,不报空指针,如下图。

   java带泛型的实体类

    运行结果如图:

    java带泛型的实体类

   这种采用继承来实例化带泛型的方法其实在实际中使用的更多,但是这还不是我最想要的实例化方法,难道就不能直接实例化B吗,直到我看到了另外一篇文章,对带泛型的实体实例化采用了这样的代码。

GenericTest<String> test = new GenericTest<String>(){};
这样对实体B的实例化就很清楚了。直接上截图。

java带泛型的实体类

对带泛型的实体类实例化和普通实体实例化不同,后面还需加上"{}"。