【问题标题】:How to use an interface as parameter of other interface with multiple implementations?如何将一个接口用作具有多个实现的其他接口的参数?
【发布时间】:2018-10-25 15:51:18
【问题描述】:

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

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

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

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

所以我有

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

ValidateStudentsHomeBased 处理 validateStudent(ObjectB inputB, ObjectC inputC)

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

这样的参数
default public void validateStudent(MyObject myObject)

到目前为止,我创建了 MyObject -> StudentClass 作为一个空接口 What is an Empty interface used for 并根据需要有两个特定的实现

所以我这样做了

public interface StudentClass {}

然后

public class StudentClassSchoolBased implements StudentClass () {
   ObjectA inputA;

//getters and setters

}

我还将创建实现StudentHomeBased

然后像编辑 StudentValidation 一样

validateStudent(StudentClass myObject)

并更改如下实现:

ValidatorStudentSchoolBased(StudentClassHomeBased myObject)

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

基本上,我想做的就是这个

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

【问题讨论】:

  • 抱歉,这里发生了很多事情,我无法准确确定您的错误是什么以及它适用于什么代码。能否请edit澄清一下?
  • 你把default public void doSomething(MyInterface myInterface )放在哪里了?
  • 一般来说,接口的目的是确保它的所有实现可以处理接口期望的数据。因此,implementorA 和implementorB 不应处理不同的方法。两种实现都需要定义这两种方法。
  • 感谢cmets,我刚刚更新了,请看@JoeC
  • @aka-one 请看一下

标签: java


【解决方案1】:

我认为您的情况可以通过使用泛型和参数化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) {

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多