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>
相关推荐
弈栈录10 分钟前
Spring Cloud 微服务架构:注册中心、配置中心与网关
java·spring cloud·架构
xuxigifxfh19 分钟前
HJ5 进制转换
java·开发语言·华为机考
denlaku21 分钟前
JDK 12 新特性详解
java·开发语言
用户0942485680324 分钟前
第28章:JDK容器感知、cgroup与云原生JVM参数治理
java·jvm
鬼手点金25 分钟前
opencode-全能开发者配置
java·linux·服务器·前端·javascript·学习·前向传播
Nebula_g25 分钟前
JavaSE拓展:可变参数
java·开发语言·算法·安全·javase·可变参数
CEZ32 分钟前
仓库数字化成熟度分级:JeeWMS 开源 Java 仓库管理系统如何支撑从可见到自治的四级跃迁
java·开源
念越43 分钟前
初中语数英答题与竞赛平台
java·数据库·spring boot
知守观1 小时前
一个半天需求干了三天:代码腐化的五个信号与自查命令
java·后端·代码规范
代码山河1 小时前
Java学习路线图:2026年最新版,从入门到架构师
java·学习·架构·教程·面向对象·项目