java - 强制接口(interface)方法返回值为多个类的通配符

标签 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> 一样。 ,似乎所有选项。

我无法让接口(interface)执行上面链接的问题的答案中建议的操作( public interface SomeInterface<T extends SomeClass & OtherInterface> ),因为此接口(interface)的实现可能希望针对不同的输入返回不同的内容。

我也无法创建一个扩展 SomeClass 并实现 OtherInterface 的抽象类,并从中扩展所有内容,因为客户端可能希望从中扩展 SomeClass 的许多现有实现。

是否有任何方法可以强制此接口(interface)的实现返回符合这两个约束的类型?除了在代码中的其他地方抛出运行时异常之外?

最佳答案

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

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

关于java - 强制接口(interface)方法返回值为多个类的通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25090245/

相关文章:

c++ - 在构造函数 C++ 中初始化成员 vector

c++ - 将数据成员数组传递给递归过程时,是否在每个堆栈帧中创建了该数组的新拷贝?

scala - 如何使用 scala 宏调用具有泛型类型参数的对象上的函数?

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

java - PDF 和 Docx 文件预览器

java - ant 1.10.x是否支持log4j2

java - Yourkit 如何衡量花在 unsafe.park native 方法上的时间?

c# - 关于将公共(public)实用程序类静态化的意见

java - 什么使泛型类型参数的名称成为泛型?

java - 方法后的 Jsoup 无法按预期方式工作