java继承后获取泛型类的class并实例化

复制代码
public class Super <T, W> {
    
    T newT() throws IllegalAccessException, InstantiationException {
        final Class<T> classT = this.getClassT();
        return classT.newInstance();
    }

    protected Class<T> getClassT() {
        Type type = getClass().getGenericSuperclass();
        ParameterizedType parameterizedType = (ParameterizedType) type;
        // 如果想获取W的class对象这里用1
        Type typeArg = parameterizedType.getActualTypeArguments()[0];
        return (Class<T>) typeArg;
    }
}

public class Sub extends Super<BeanAbc, String> {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        Sub sub = new Sub();
        final BeanAbc beanAbc = sub.newT();
        System.out.println(beanAbc);
    }

}

public class BeanAbc {

    private Integer id;
    private String name;

    public BeanAbc() {
        this.id = 1;
        this.name = "ddd";
    }
}

输出:

BeanAbc(id=1, name=ddd)

主要用途:当某些对象的处理逻辑相似的时候,可以使用泛型类将不同的地方抽取出来,这样只要创建多个子类,就可以实现多种不同的业务逻辑。该功能是从mp的思路中学习的。

mybatis plus有个非常实用的类:

复制代码
public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T>
相关推荐
黎雁·泠崖27 分钟前
Java字符串高阶:底层原理深剖+经典面试题全解
java·开发语言
重生之我是Java开发战士35 分钟前
【Java SE】反射、枚举与Lambda表达式
java·开发语言
weixin_4365250737 分钟前
若依多租户版 - @ApiEncrypt, api接口加密
java·开发语言
Hello.Reader44 分钟前
Flink Java 版本兼容性与 JDK 模块化(Jigsaw)踩坑11 / 17 / 21 怎么选、怎么配、怎么稳
java·大数据·flink
TechPioneer_lp1 小时前
小红书后端实习一面|1小时高强度技术追问实录
java·后端·面试·个人开发
TH_11 小时前
37、SQL的Explain
java·数据库·sql
康王有点困1 小时前
Flink部署模式
java·大数据·flink
EndingCoder1 小时前
属性和参数装饰器
java·linux·前端·ubuntu·typescript
芒克芒克2 小时前
LeetCode 134. 加油站(O(n)时间+O(1)空间最优解)
java·算法·leetcode·职场和发展
huahailing10242 小时前
Spring 循环依赖终极解决方案:从原理到实战(附避坑指南)
java·后端·spring