Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在多个类中使用相同的方法,但使用不同的类型_Java_Abstract Class - Fatal编程技术网

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;
   }
}