java带泛型的实体类

来源:互联网 发布:英国知山大学 编辑:程序博客网 时间:2024/04/28 01:12

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

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

    

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的实例化就很清楚了。直接上截图。


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

0 0