如何强制执行具体类将具体实例作为参数?

时间:2015-04-19 19:22:32

标签: java oop

这是我的用例,

public interface dataModel {
   //nothing
}
public interface dataRepo {
    public doIt(dataModel a);
}
public class concreteDataModel implements dataModel {
    public doIt(dataModel a);
}
public class concreteDataRepo implements dataRepo {
    public doIt(dataModel a);
}

我觉得我做错了。我有几个datarepo和datamodel。我希望repo采用自己的数据模型。是否有任何设计模式可以使其干净?

2 个答案:

答案 0 :(得分:2)

您可以使用泛型。

public interface dataModel {
   //nothing
}
public interface dataRepo<T extends dataModel> {
    public doIt(T a);
}
public class concreteDataModel implements dataModel {
    public doIt(dataModel a);
}
public class concreteDataRepo implements dataRepo<concreteDataModel> {
    public doIt(concreteDataModel a);
}

答案 1 :(得分:0)

您可以尝试使用泛型:

interface dataModel { }
class concreteDataModel implements dataModel { }

interface dataRepo<E extends dataModel> {
    public void doIt(E a);
}

class concreteDataRepo implements dataRepo<concreteDataModel> {

    @Override
    public void doIt(concreteDataModel a) {

    }
}