3

我想知道是否可以将方法的参数设置为对象,它必须是扩展一个类并实现另一个类。这是一个示例:假设我有一个名为 ClassA 的类和一个名为 MyInterface 的接口。

public class ClassA {
    /* code */
}    


public interface MyInterface {
    /* code */
}

假设在其他地方有一个名为 ClassB 的类,它既扩展了 ClassA 又实现了 MyInterface。

public class ClassB extends ClassA implements MyInterface {
    /* code */
}

我也可以有一个 ClassC,它也扩展了 ClassA 并实现了 MyInterface:

public class ClassC extends ClassA implements MyInterface {
    /* code */
}

我的问题是这样的:

假设我有一个名为 method1 的方法,并且在 method1 中我想要一个接受 Object 的参数。假设我希望这个 Object 是 ClassA 的子类,或者实际上是 ClassA 本身。这很容易做到:

 public void method1(ClassA parameter) {

 }

假设我还想要一个method2,并且在method2中我想要一个接受任何实现MyInterface的参数。同样,这很容易:

 public void method2(MyInterface parameter) {

 }

但是,如果我想要一个方法 3,并且我想要一个参数,它只接受 ClassA 的子类或 ClassA 本身的对象,并且实现 MyInterface,因此将接受 ClassB 和 ClassC,但不接受任何只扩展 ClassA 的类,或者只实现 MyInterface,或者都不实现。喜欢:

public void method3 ([Something that extends ClassA implements MyInterface] parameter) {
  /* code */
}
4

2 回答 2

18

您可以执行以下操作:

public <A extends ClassA & MyInterface> void method3(A parameter) { ... }

但我认为这不是一个好主意——如果你有一个可以扩展ClassA和实现的对象的概念MyInterface,那么最好创建一个单独的类或接口来表示该概念。

于 2012-07-12T18:31:09.893 回答
0

根据您的描述,您似乎需要另一种类型的对象。一个既扩展 ClassA实现 MyInterface 的接口。也许,甚至,这是一个抽象类。

然后我将使用这个新对象作为方法 3 的参数类型。

于 2012-07-12T18:29:44.987 回答