作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试使用 Jukito 模拟 Dao 时我收到以下异常:
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
at org.jukito.JukitoModule.addKeyDependency(JukitoModule.java:338)
at org.jukito.JukitoModule.addInjectionPointDependencies(JukitoModule.java:330)
at org.jukito.JukitoModule.addDependencies(JukitoModule.java:313)
我尝试模拟的对象是一个ConcreteDao
。
public class ConcreteDao extends AbstractDao<MyDomain> {
}
public abstract class AbstractDao<T extends DatastoreObject> {
}
我在 SO 上阅读了几篇关于此绑定(bind)泛型的文章,但我无法找到使用 TypeLiteral
进行绑定(bind)的方法。
这是我尝试过的:
bind(new TypeLiteral<AbstractDao<MyDomain>>(){}).to(ConcreteDao.class);
最佳答案
您需要像这样绑定(bind):
bind(new TypeLiteral<AbstractDao<MyDomain>>(){}).to(new TypeLiteral<ConcreteDao<MyDomain>>(){});
这是检索泛型类的方法:
class AbstractDao {
protected final Class<T> clazz;
@Inject
public AbstractDao(TypeLiteral<T> type) {
clazz = (Class<T>) type.getRawType();
}
}
AbstractDao
的子类需要将实体特定的 TypeLiteral
传递给父类 (AbstractDao
):
class ConcreteDao extends AbstractDao<MyDomain> {
@Inject
public ConcreteDao(TypeLiteral<MyDomain> type) {
super(type);
}
}
请注意,您可以使 AbstractDao 类成为非抽象类并实现基本的 CRUD 操作,这样您就可以使用它,而无需为每个实体扩展 AbstractDao
。您只需要为每个实体进行绑定(bind),如下所示:
bind(new TypeLiteral<GenericDao<User>>(){}).in(Scopes.SINGLETON);
查看我的blog-post了解更多信息。
关于java - 如何绑定(bind)泛型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9847793/
我是一名优秀的程序员,十分优秀!