这个问题是Java Generics Wildcarding With Multiple Classes的后续问题。
我正在写一个这样的界面:
public interface SomeInterface {
public Class<? extends SomeClass implements OtherInterface> getClassForObject(Object object);
}
我知道这是错误的语法,就像Class<? extends SomeClass & OtherInterface>
一样,它似乎都是选项。
我不能让界面执行上面链接的问题(public interface SomeInterface<T extends SomeClass & OtherInterface>
)的答案中建议的界面,因为此界面的实现可能希望为不同的输入返回不同的内容。
我也无法创建一个扩展SomeClass并实现OtherInterface的抽象类,并且从中扩展了所有内容,因为客户端可能希望扩展的SomeClass有许多现有实现。
有没有办法强制此接口的实现返回适合两种约束的类型?除了在代码中的其他地方抛出运行时异常?
答案 0 :(得分:1)
您不能对通配符施加多个限制。您可以在方法上声明泛型类型参数而不是接口本身,并且可以对其施加多个限制。尝试:
public interface SomeInterface {
public <T extends SomeClass & OtherInterface> Class<T>
getClassForObject(Object object);
}