我正在编写一个方法,该方法要求其参数之一源自特定类 (MyClass
) 并实现一个接口(interface) (MyInterface
)。
执行此操作的一种粗略方法是
public void doStuff(MyClass arg0) {
if (!(arg0 instanceof MyInterface))
throw new IllegalArgumentException("arg0 must implement MyInterface");
// do whatever we need to do
}
请注意,MyClass
并未实现 MyInterface
,两者都是我按原样导入的类。
有没有一种更优雅的方法来做到这一点,最好是在构建时就已经标记错误的方法?
最佳答案
您可以使用以下通用方法来做到这一点:
public <T extends MyClass & MyInterface> void doStuff(T arg) { ... }
假设有以下类(和接口(interface))
class MyClass {}
interface MyInterface {}
class A extends MyClass {}
class B implements MyInterface {}
class C extends MyClass implements MyInterface {}
下面两条语句是非法的(编译器错误)
doStuff(new A());
doStuff(new B());
而以下语句将编译
doStuff(new C());
参见JLS §4.4 (Type Variables)有关 somehwat 奇怪的类型变量声明的更多信息。
关于java - 指定方法参数必须从一个类继承并实现一个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38208677/