我已经为我的所有 Bean 类实现了 Generic DAO。我在将条目设置到缓存时遇到问题。
DAO.class
public abstract class DAO<T extends Serializable> extends Cache
{
save(Collection<T> list)
{
// batch process will store the list to db
for(T t : list)
{
cache(t.getKey(), t);
}
}
}
Bean's DAO classes
public class BeanDAO1 extends DAO<Bean1>
{
public static set(Collection<Bean1> list)
{
super.save(list);
}
}
public class BeanDAO2 extends DAO<Bean2>
{
public static set(Collection<Bean2> list)
{
super.save(list);
}
}
现在的问题是,两个 Bean 类都有相同的 getter 方法 getKey()
。但在 DAO 类中,由于它是类型引用的,我无法访问该方法。
是我做错了什么还是我应该做其他事情?
最佳答案
在 save
方法中,您可以访问 T
类型对象的 getKey()
方法。为此,您必须将该类型变量限制为具有此方法的类型的子类型。事实上,编译器唯一知道您的 T
是 Serialized
的子类型(它没有此方法)。
这意味着您应该为所有 bean 拥有一个父类(super class)型:
public interface Bean extends Serializable {
public ? getKey(); // I do not know what type your keys are
}
您的 bean 类应该实现此接口(interface)。然后您可以执行以下操作:
public abstract class DAO<T extends Bean> extends Cache {
public save(Collection<T> list) {
for(T t : list) {
cache(t.getKey(), t);
}
}
}
关于java - 调用泛型类型实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25421122/