java - 调用泛型类型实例方法

标签 java generics

我已经为我的所有 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() 方法。为此,您必须将该类型变量限制为具有此方法的类型的子类型。事实上,编译器唯一知道您的 TSerialized 的子类型(它没有此方法)。

这意味着您应该为所有 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/

相关文章:

ios - Swift 泛型和协议(protocol) : Return specialized type from static function?

Java 泛型 : Is this safe enough?

java - 尽管推断出 Long,但 Collectors.maxBy(Comparator.naturalOrder()) 无法编译

java - 尝试在泛型类中应用 lambda 表达式时出现类型不匹配编译错误

Java 从另一个数组的通用运行时类型创建数组

java - JDBC 表不存在但确实存在

java - Android 应用程序的时间圈动画

java - 在声明和方法中调用 new 关键字两次

java - 比较器不允许我比较 T 值

C# 多个泛型约束