我有类 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/