java - 使用 Java 泛型的多个绑定(bind)类型定义接口(interface)

标签 java generics

我在高级 Java 泛型方面的知识相对处于初级水平。我想定义一个像这样的接口(interface)

public interface Transformer {
 <T extends String & List<String>> T transform(String input) throws            
  IOException;
}

我的实现类A如下所示:

public Class A implements Transformer{
   ....
   ....

  @Override
  public <T extends String & List<String>> T transform(String input)     throws IOException {
     String response = "a";
    return response; // compilation error "Incompatible Types: Required T but found java.lang.String"
   }

}

我想要的:实现类应该能够传递字符串输入,返回类型可以是字符串或列表。实现类完全可以自由选择任一返回类型。

问题: 1. 为什么会出现编译错误“不兼容的类型:必需的 T 但发现 java.lang.String”?

最佳答案

我认为您误解了交叉点类型。

你的定义意味着:T是一个字符串and List<String> ,而不是字符串 OR List<String> ,这是不可能的,因为 String 不是 List<String>没有什么可以延长 StringList<String>因为Stringfinal .

如果两个接口(interface)之间有交集,这样的定义是有意义的,因为 Java 支持多个接口(interface)继承,或者一个实现和多个接口(interface),因为一个类可以扩展另一个实现并实现多个接口(interface)。

因为 List<String>能够有零个或多个字符串,你可以让你的方法只返回 List<String> .

关于java - 使用 Java 泛型的多个绑定(bind)类型定义接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37398913/

相关文章:

java - 默认以 super 用户身份执行linux命令

swift - 将 Collection 的子序列转换为 String

java - 通用下限通配符与上限通配符

java - 有没有办法用类型变量引用当前类型?

Java 程序从文本文件读取输入并进行相应修改

java - 如何检测调用 onClick 处理程序时是否按下了 Shift 键?

java.util.regex.PatternSyntaxException : at\b within regexp

java - Swing 的 JPanel 不是很像 AWT 的面板吗?前者的小部件未显示

Java int[] 数组到 HashSet<Integer>

java - 泛型下界 ('super' ) 问题?