作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类:
public abstract class BaseDaoImpl<T extends BaseModel> implements BaseDao<T> {
}
我还使用注释来生成 SQL 查询(由于各种原因我无法使用 hibernate 等框架),例如 @Table 和 @Column
我希望能够检索 <T extends BaseModel>
.class
实例而不必采取 T
作为方法的输入。
我认为简单的替代方法是创建一个方法:
public void set(Class<T> clazz){}
但是,如果可能的话,我想避免这种情况,以使我的代码尽可能精简。这可能吗?
最佳答案
虽然使用反射有点代码味道,但你可以获得你需要的信息:
Class<T> modelImplementationClass = (Class<T>)
((BaseModel)this.getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
Reflection 是一个 Java API,允许您在运行时访问或修改方法、类、接口(interface)的行为。
反射通常应该避免,因为它非常慢并且通过揭示内部实现细节来破坏抽象。
关于java - 检索泛型类型的类实例而不将泛型作为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59056782/
我是一名优秀的程序员,十分优秀!