【java】如何通过反射获取泛型类

核心代码:(编写在父类中)

public class BaseDaoImpl<T> implements BaseDao<T> {
    private Class<T> beanClass;
    
    @SuppressWarnings("unchecked")
    public BaseDaoImpl() {
        ParameterizedType parameterizedType=(ParameterizedType)this.getClass().getGenericSuperclass();
        beanClass=(Class<T>) parameterizedType.getActualTypeArguments()[0];
    }
    // 省略具体的操作....
}

应用场景:

目标:为了实现代码的重用性,编写了父类接口BaseDao和父类方法BaseDaoImpl,想用BaseDaoImpl类实现操作数据库共有的增删改查。

问题:因此父类方法必须用到泛型,以保证所有数据库不同的表都能够被操作。所以子类在编写sql语句的时候(继承父类方法,只需要提供表名即可),为了简单,我们希望拿到泛型的名称。

比如说:UserDaoImpl为了获取数据库中所有的User,为了重用,父类方法应该考虑到子类使用方便,因此编写以上代码,父类需要拿到T泛型的类名。比如以下代码是编写在BaseDaoImpl中的:

        public List<T> getAll(String param)  {
		String sql="delete from "+beanClass.getSimpleName()+" "+param;
		
		System.out.println(sql);
		// 添加执行此sql语句的代码,并且作为返回值
		return null;
	}

也就是说这个时候,子类(比如说UserImpl类)继承BaseDaoImpl的时候注意填写泛型为对应的表名User就好了(当然其他表也一样)

public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {

}

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smile-yan

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值