任何人都可以帮我找到在 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>
,则会进行编译。控制台输出:
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>
版本
答案 0 :(得分:0)
因为SortComparator
的返回类型不是元组(或Map.Entry)。
// Only takes one argument...
private <O extends Comparable<O>> SortComparator<O> build(final Class<O> clazz) {
return null;
}
答案 1 :(得分:0)
我尝试了以下示例,它在Eclipse和命令行中编译良好:
public class Test {
public static class SortComparator<T, O extends Comparable<O>> implements Comparator<T> {
@Override
public int compare(T o1, T o2) {
return 0;
}
}
private static <T, O extends Comparable<O>> SortComparator<T, O> build(
final Class<O> clazz) {
// you can return null here too
return new SortComparator<T, O>();
}
public static void main(String[] args) {
SortComparator<String, Integer> a = build(Integer.class);
}
}