我在高级 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>
没有什么可以延长 String
和List<String>
因为String
是 final
.
如果两个接口(interface)之间有交集,这样的定义是有意义的,因为 Java 支持多个接口(interface)继承,或者一个实现和多个接口(interface),因为一个类可以扩展另一个实现并实现多个接口(interface)。
因为 List<String>
能够有零个或多个字符串,你可以让你的方法只返回 List<String>
.
关于java - 使用 Java 泛型的多个绑定(bind)类型定义接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37398913/