java - 如何定义方法参数的类型约束?

标签 java type-constraints

我有类 A 和接口(interface) B,还有一个方法:

void foo(A x) {}

我想要的是在参数 x 上定义一个约束,它必须实现接口(interface) B


虽然我知道它可以在运行时完成,例如:

void foo(A x) {
    if (!(x instanceof B)) {
        throw new IllegalStateException();
    }
}

或者定义另一个类并改变方法签名,例如:

class C extends A implements B {}

void foo(C x) {}

我不接受这个解决方案,因为在我的例子中,我在第 3 方 jar 中有许多 A 的子类,我不想修改它们。


我想知道它是否可以在语言级别上实现,在我编写调用代码时即时启用该约束。

最佳答案

如果您必须这样做,您可以使用泛型,如 Bounded Type Parameters 中所述。文档,“多边界”部分:

public interface A {}
public interface B {}
public static class C implements A, B {}

public static <T extends A & B> void foo(T type) {

}

public static void main(String[] args) {
  foo(new A() {}); // compile error
  foo(new B() {}); // compile error
  foo(new C() {});
}     

关于java - 如何定义方法参数的类型约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52420695/

相关文章:

java - 尝试安装 JDK8 U11 OSX 10.10 Yosemite 时出错

interface - 具有类型约束的接口(interface)方法的 F# 实现

haskell - 约束上的平等

haskell - 为什么 Haskell 没有在函数签名中推断数据类型的类型类?

scala - < :<, <%< 和 = := mean in Scala 2. 8 有何作用,它们记录在哪里?

java - 在 catch block 中编写的任何代码是否会导致使用更多资源?

java - 使用 Java 将 QR 码生成为可扩展 EPS

c# - 非严格的多接口(interface)类型参数约束?

java - 使用 Gson 将 JSON 转换为 Java 对象

java - REST 异常需要构造函数