Hen*_*son 3 java parameters function extend implements
我想知道是否可以将方法的参数设置为Object,它必须是一个扩展的类并实现另一个类.这是一个例子:假设我有一个名为ClassA的类和一个名为MyInterface的接口.
public class ClassA {
/* code */
}
public interface MyInterface {
/* code */
}
Run Code Online (Sandbox Code Playgroud)
让我们说其他地方有一个名为ClassB的类,它们都扩展了ClassA并实现了MyInterface.
public class ClassB extends ClassA implements MyInterface {
/* code */
}
Run Code Online (Sandbox Code Playgroud)
我也可以有一个ClassC,它还扩展了ClassA并实现了MyInterface:
public class ClassC extends ClassA implements MyInterface {
/* code */
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
假设我有一个名为method1的方法,在method1中我希望有一个接受Object的参数.假设我希望这个Object要么是ClassA的子类,要么实际上是ClassA本身.这很容易做到:
public void method1(ClassA parameter) {
}
Run Code Online (Sandbox Code Playgroud)
假设我也想要一个方法2,并且在方法2中我想要一个接受任何实现MyInterface的参数的参数.同样,这很容易:
public void method2(MyInterface parameter) {
}
Run Code Online (Sandbox Code Playgroud)
但是如果我想要一个method3,并且我希望有一个参数只接受ClassA的子类或ClassA本身,并且实现MyInterface,那么接受ClassB和ClassC,但不接受任何只扩展ClassA的类,或者只实现MyInterface,或者两者都不实现.喜欢:
public void method3 ([Something that extends ClassA implements MyInterface] parameter) {
/* code */
}
Run Code Online (Sandbox Code Playgroud)
axt*_*avt 18
您可以执行以下操作:
public <A extends ClassA & MyInterface> void method3(A parameter) { ... }
Run Code Online (Sandbox Code Playgroud)
但我不认为这是一个好主意 - 如果你有一个扩展ClassA
和实现的对象概念,MyInterface
最好创建一个单独的类或接口来表示这个概念.