Java 无法使用静态列表<;字符串>;在比较器内<;字符串>;
为什么我必须在静态字段列表中完全限定java.lang.StringJava 无法使用静态列表<;字符串>;在比较器内<;字符串>;,java,generics,comparator,Java,Generics,Comparator,为什么我必须在静态字段列表中完全限定java.lang.String public static class MyComparator<String> implements Comparator<String> { public static List sortOrder; public static List<Integer> sortOrder2; public static List<java.la
public static class MyComparator<String> implements Comparator<String> {
public static List sortOrder;
public static List<Integer> sortOrder2;
public static List<java.lang.String> sortOrder3; // works!
public static List<String> sortOrder4; // <-Compiler error only in this line
@Override
public int compare(String s1, String s2) {
// TODO
return -1;
}
}
公共静态类MyComparator实现Comparator{
公共静态列表排序器;
公共静态列表排序器2;
公共静态列表排序器3;//有效!
公共静态列表排序器4;//替换:
public static class MyComparator<String> implements Comparator<String>
公共静态类MyComparator实现Comparator
另一个与众不同的名字:
public static class MyComparator<S> implements Comparator<String>
公共静态类MyComparator实现Comparator
您定义了一个与类同名的泛型类型参数String
,因此String
引用了您的参数,而java.lang.String
仍然有效
将其从类中删除,但将其保留在implements
子句中
public static class MyComparator implements Comparator<String> {
公共静态类MyComparator实现Comparator{
但它应该是一个比较两个java.lang.String对象的比较器,在SortedMap中使用。S
的目的是什么,当它应该比较String
S时?它没有目的,这是解决方案。@rgetman好吧,在这种情况下,你完全正确,我甚至会对你的帖子投赞成票。我所做的就是扫描OP的代码,而不扫描理解它的目的,但发现问题。