美文网首页diboot
如何在父类中获取子类泛型的Class

如何在父类中获取子类泛型的Class

作者: 一个鸡蛋壳儿 | 来源:发表于2019-11-21 14:31 被阅读0次

假如你定义了一个有泛型的Base类,如下BaseClass<DO, VO>代码示例,如何在BaseClass中获取到子类对应的DO、VO的class对象呢?

class BaseClass<DO, VO> {
    Class<DO> doClass;
    Class<VO> voClass;
    ...
}

1. 传统方式:通过参数传递或由子类指定

//通过参数传递
class BaseClass<DO, VO> {
    //Class<?>定义为参数,通过参数传递
    public myMethod(..., Class<?> clazz){
        ...
    }
}
//由子类指定
class UserClass extends BaseClass<UserDO, UserVO> {
   ...{
       super.doClass = UserDO.class;
       super.voClass = UserVO.class;
   }
}

这种方式非常简单容易理解,但会在方法/子类中产生冗余代码。

下面还有两种更优雅的实现代码:

2. 在Base类中通过Java反射统一获取

class BaseClass<DO, VO> {
   ...{
        Type[] types = ((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments();
        this.doClass = (Class<DO>)types[0];
        this.voClasss = (Class<VO>)types[1];
   }
}  
// 如果是接口获取实现类的泛型class,需将getGenericSuperclass()替换成getGenericInterfaces()

3. 在Base类中通过Spring统一获取

class BaseClass<DO, VO> {
    ...{
        ResolvableType resolvableType = ResolvableType.forClass(this.getClass()).getSuperType();
        ResolvableType[] types = resolvableType.getSuperType().getGenerics();
        this.doClass = (Class<DO>) types[0].resolve();
        this.voClasss = (Class<VO>) types[1].resolve();
    }
}

Diboot - 简单高效的轻代码开发框架 (欢迎star)

相关文章

  • 如何在父类中获取子类泛型的Class

    假如你定义了一个有泛型的Base类,如下BaseClass代码示例,如何在BaseClass中获取...

  • Java自学-泛型 泛型转型

    Java 中的子类泛型转型成父类泛型 步骤 1 : 对象转型 根据面向对象学习的知识,子类转父类 是一定可以成功的...

  • springboot泛型封装开发

    JDK1.5出来后,Java开始支持泛型开发,通过将父类声明为泛型,子类继承父类,子类就能拥有父类的方法,而不需要...

  • 泛型 - 类层次

    跟非泛型类一样,泛型类也可以作为父类或子类,从而成为类层次的一部分。其中的关键区别是:在泛型类层次中,所有子类都必...

  • spring学习13( 泛型依赖注入)

    在父类配置的关系子类会继承 会指向泛型对应的子类 父类 pojo: 子类: 相关配置... http://www....

  • netty中builder模式-链式调用

    简化如下 该设计非常巧妙 在父类中巧用泛型解决了子类调用父类方法强转的问题

  • Scala 类型系统

    1.在scala泛型中获取其 Class[T] 需求:获取一个泛型 T 的 class 类型的 Class[T],...

  • iOS super的方法调用分析笔记

    讨论在子类中调用-[super class]获取到的是父类的类对象还是子类的类对象?代码如下: 通过转换成C++代...

  • 继承

    extends继承 格式:class 子类 extends 父类{} 子类中,可...

  • IOS 获取父类的所有子类

    1、获取父类的所有子类 -(void)getSubclass { int numClasses; Class *c...

网友评论

    本文标题:如何在父类中获取子类泛型的Class

    本文链接:https://www.haomeiwen.com/subject/sdhtwctx.html