谁能帮我找出在 jdk1.6.0_45 中运行的这段代码有什么问题吗?
public class App {
public static void main(final String args[]) {
SortComparator<String, Integer> a = build();
}
private static <T, O extends Comparable<O>> SortComparator<T, O> build() {
return null;
}
public class SortComparator<T, O extends Comparable<O>> implement Comparator<T> {
@Override
public int compare(final T o1, final T o2) {
return 1;
}
}
}
这是一个纯Java语言的问题。为什么它不能编译?为什么在 Eclipse 中会这样?
- 如果我改变
SortComparator<String, Integer>
至Map<String, Integer>
它可以编译。 - 如果我添加参数 Class< O> arg 作为 build 的参数,它就会编译。
- 如果我添加App. build() 到它编译的调用。
控制台输出:
incompatible types; no instance(s) of type variable(s) T,O exist so that build<T,O> conforms to SortComparator<java.lang.String,java.lang.Integer>
版本
- Apache Maven 3.0.5(r01de14724cdef164cd33c7c8c2fe155faf9602da;2013-02-19 14:51:28+0100)
- Java 版本:1.6.0_45,供应商:Sun Microsystems Inc.
- 默认区域设置:es_ES,平台编码:Cp1252
- 操作系统名称:“windows 7”,版本:“6.1”,架构:“x86”,系列:“windows”
最佳答案
因为SortComparator
的返回类型不是元组(或Map.Entry)。
// Only takes one argument...
private <O extends Comparable<O>> SortComparator<O> build(final Class<O> clazz) {
return null;
}
关于Java 通用代码在 eclipse 中构建,但不在 mvn 中构建(相同的 VM 版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20663007/