强制接口方法返回值为具有多个类的通配符

时间:2014-08-01 23:47:10

标签: java class generics interface bounded-wildcard

这个问题是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有许多现有实现。

有没有办法强制此接口的实现返回适合两种约束的类型?除了在代码中的其他地方抛出运行时异常?

1 个答案:

答案 0 :(得分:1)

您不能对通配符施加多个限制。您可以在方法上声明泛型类型参数而不是接口本身,并且可以对其施加多个限制。尝试:

public interface SomeInterface {
   public <T extends SomeClass & OtherInterface> Class<T>
      getClassForObject(Object object);
}