我正在编写一个方法,要求其中一个参数来自特定的类(MyClass)并实现一个接口(MyInterface).
这样做的原因很简单
public void doStuff(MyClass arg0) {
if (!(arg0 instanceof MyInterface))
throw new IllegalArgumentException("arg0 must implement MyInterface");
// do whatever we need to do
}
Run Code Online (Sandbox Code Playgroud)
请注意,MyClass这没有实现MyInterface,两者都是我按原样导入的类.
有没有更优雅的方式来做到这一点,最好是在构建时标记错误的方法?
您可以使用以下通用方法执行此操作:
public <T extends MyClass & MyInterface> void doStuff(T arg) { ... }
Run Code Online (Sandbox Code Playgroud)
假设以下类(和接口)
class MyClass {}
interface MyInterface {}
class A extends MyClass {}
class B implements MyInterface {}
class C extends MyClass implements MyInterface {}
Run Code Online (Sandbox Code Playgroud)
以下两个语句都是非法的(编译器错误)
doStuff(new A());
doStuff(new B());
Run Code Online (Sandbox Code Playgroud)
而以下语句将编译
doStuff(new C());
Run Code Online (Sandbox Code Playgroud)
有关somehwat奇怪类型变量声明的更多信息,请参阅JLS§4.4(类型变量).
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |