Java 在多个类中使用相同的方法,但使用不同的类型
我有多个类实现方法Java 在多个类中使用相同的方法,但使用不同的类型,java,abstract-class,Java,Abstract Class,我有多个类实现方法create public TeamScorePk create(TeamScore entity) { TeamScorePk pk = entity.getPk(); if (!pk.validate()) { throw new IllegalArgumentException("Part of primary key is null:" + entity); } if (INSTANCES.containsKey(pk))
create
public TeamScorePk create(TeamScore entity) {
TeamScorePk pk = entity.getPk();
if (!pk.validate()) {
throw new IllegalArgumentException("Part of primary key is null:" + entity);
}
if (INSTANCES.containsKey(pk)) {
throw new IllegalArgumentException(entity + " already exists.");
}
INSTANCES.put(pk, entity);
return pk;
}
Map实例
的服务类似于DB table。
不同类中create
方法的唯一区别是它使用的类型。因此我想把这个方法放到一个抽象的超类中。问题在于map实例
,因为我必须从扩展类中获取它。我可以声明抽象方法getInstances,但它应该返回的映射类型有问题。如果我使用类似于Map公共抽象类基类{
受保护的抽象映射getInstances();
}
公共类ChildClass扩展了基类{
受保护的映射getInstances(){
// ...
}
}
我将使抽象超类具有子类将处理的键和值的类型
public abstract class SomeSuperclass<K extends Pk, V extends Entity> {
然后子类所要做的就是提供映射
(并以某种方式填充它)
Map Map=newhashmap;
及
publicmap getInstances(){
返回图;
}
}
如果你放在那里的东西都是Pk和entity,或者这些类的扩展,请尝试Map
。“ChildOfPk”仍然是一个“Pk”,现在第kpk=entity.getPk()行中有一个问题代码>Entity
是一个抽象类,它声明一个抽象方法K getPk()
。我必须将entity.getPk()
转换为K
,才能使其工作。我还在哪里做错了什么?
public abstract class SomeSuperclass<K extends Pk, V extends Entity> {
public K create(V entity) {
K pk = entity.getPk();
if (!pk.validate()) {
throw new IllegalArgumentException("Part of primary key is null:" + entity);
}
if (getInstances().containsKey(pk)) {
throw new IllegalArgumentException(entity + " already exists.");
}
getInstances().put(pk, entity);
return pk;
}
public abstract Map<K, V> getInstances();
}
public class TeamScoreSubclass extends SomeSuperClass<TeamScorePk, TeamScore> {
Map<TeamScorePk, TeamScore> map = new HashMap<>;
public Map<TeamScorePk, TeamScore> getInstances() {
return map;
}
}