一句话总结:泛型只在编译期生效!运行期不起作用!
先介绍问题,再引申到理论,比死记理论要好。最近要封装一个通用DAO类,理所当然想到使用泛型,这样不同业务Service调用此DAO类就不用再转换Entity类:
public class CommonDao<T> { private EntityManager entityManager; public T findById(String id) { // 重点:这里T.class会报错,这里是问题 return (T) this.entityManager.find(T.class, id); } } // Service示例,CommonDao传入具体类型,方法无需类型转换 public class CatService { private CommonDao<CatEntity> commonDao; } public class DogService { private CommonDao<DogEntity> commonDao; }