java - 指定方法参数必须从一个类继承并实现一个接口(interface)

标签 java android

我正在编写一个方法,该方法要求其参数之一源自特定类 (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/

相关文章:

android - 处理 RecognitionListener 错误

android - jquery focus() 在移动设备(android)中不起作用,phonegap-cordova

android - 在另一个 View 中嵌入 ListView

多个传感器的Android不同传感器延迟失败

java - 无法到达的声明

java - 处理死信队列的配置

java 11 spring boot2 redis运行时异常

java - 无法在 Java 正则表达式中使用 '-' 字符,它在给定文本中找不到模式

c# - $(TargetFrameworkVersion) (v9.0) 小于 Xamarin.Forms (10.0) 所需的最低 $(TargetFrameworkVersion)

java - SSL套接字 : why do we need to do the handshake before accessing the server certificate?