Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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_Oop - Fatal编程技术网

Java 如何以一个具体实例作为参数来强制具体类?

Java 如何以一个具体实例作为参数来强制具体类?,java,oop,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 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。我希望回购协议采用其自身类型的数据模型。是否有任何设计模式可以使这一点变得清晰?

您可以使用泛型

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);
}
公共接口数据模型{
//没什么
}
公共接口dataRepo{
公共事务部;
}
公共类concreteDataModel实现了dataModel{
公共doIt(数据模型a);
}
公共类concreteDataRepo实现dataRepo{
公共doIt(模型a);
}

您可以尝试泛型:

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) {

    }
}
接口数据模型{}
类concreteDataModel实现数据模型{}
接口数据报告{
公共部门(EA);
}
类concreteDataRepo实现dataRepo{
@凌驾
公共void doIt(concreteDataModel a){
}
}

这不是公共事务吗(dataRepo a)?他说的是同类的,这就是为什么我要问。@Dici你指的是哪一行?我的理解是,他希望在datarepo实现上将datamodel和datarepo绑定在一起。也许OP可以更新一下他的问题。你改的那个!在dataRepo中,但事实上我想让OP澄清它的问题,我不确定我是否理解得很好,因此我的评论可能不相关。你所说的同类的
是什么意思?给出一个具体的例子,说明什么是禁止的,什么是允许的