指定方法参数必须从一个类继承并实现接口

时间:2016-07-05 16:48:31

标签: java android

我正在编写一个方法,要求其中一个参数来自特定的类(MyClass)并实现一个接口(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,并且两者都是我导入的类。

有没有更优雅的方法,最好是在构建时标记错误的方法?

1 个答案:

答案 0 :(得分:5)

您可以使用以下通用方法执行此操作:

public <T extends MyClass & MyInterface> void doStuff(T arg) { ... }

假设以下类(和接口)

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());

有关somehwat怪异类型变量声明的更多信息,请参阅JLS §4.4 (Type Variables)