首页 > 解决方案 > 如何将一个接口用作具有多个实现的其他接口的参数?

问题描述

我正在尝试解决这个问题。

有一个公共接口StudentValidation有这个方法:

default public void validateStudent(ObjectA inputA){};
default public void validateStudent(ObjectB inputB, ObjectC inputC){};

它在两个不同的类中有实现。

所以我有

ValidatorStudentSchoolBased处理validateStudent(ObjectA inputA) 的值...

ValidateStudentsHome基于该过程validateStudent(ObjectB inputB, ObjectC inputC)

所以现在通用接口没有多大意义,我想知道是否有任何策略、接口/实现可以用于这种情况,这样我就可以发送一个参数,比如

default public void validateStudent(MyObject myObject)

到目前为止,我创建了 MyObject -> StudentClass 作为一个空接口什么是一个空接口用于并具有两个根据需要的特定实现

所以我做了这个

public interface StudentClass {}

接着

public class StudentClassSchoolBased implements StudentClass () {
   ObjectA inputA;

//getters and setters

}

我还将创建实现StudentHomeBased

然后编辑 StudentValidation 像

validateStudent(StudentClass myObject)

并更改实现,例如:

ValidatorStudentSchoolBased(StudentClassHomeBased myObject)

说与接口不匹配(我不能覆盖),因为接口的类型是StudentClass,即使StudentClassHomeBased实现了它,也不是诀窍,知道如何做我想做的事吗?

基本上,我想做的是这个

创建一个接口方法,作为参数接收另一个具有多个实现的接口,这可能吗?

标签: java

解决方案


我认为您的情况可以通过使用泛型和参数化来解决StudentValidation。这是你想要达到的目标吗?

public interface StudentValidation<T>{
    public void validateStudent(T student);
}

public class ValidatorStudentSchoolBased implements 
StudentValidation<StudentClassSchoolBased>{

    @Override
    public void validateStudent(StudentClassSchoolBased student) {

    }
}

public class ValidateStudentsHomeBased implements 
StudentValidation<StudentClassHomeBased>{

    @Override
    public void validateStudent(StudentClassHomeBased student) {

    }
}

推荐阅读