在Comparator<String>中无法使用静态List<String>。

4
为什么我必须在静态字段列表中完全限定java.lang.String?
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;
        }
    }

错误信息为“无法对非静态类型String进行静态引用”。
2个回答

13

您定义了一个泛型类型参数String,它与类名相同,因此String指的是您的参数,而java.lang.String仍然有效。

从您的类中删除它,但保留在implements子句中。

public static class MyComparator implements Comparator<String> {

2

替换:

public static class MyComparator<String> implements Comparator<String>

更改为其他独特的名称:

public static class MyComparator<S> implements Comparator<String>

但它应该是一个比较器,用于比较两个java.lang.String对象,在SortedMap中使用。 - AlexWien
2
S 用于比较 String 时,它的目的是什么? - rgettman
1
它没有目的,那就是解决方案。 - AlexWien
@rgettman,嗯,在这种情况下,你是完全正确的,我甚至会点赞你的帖子。我所做的就是扫描了问题代码,而不是理解其目的,但是为了找出问题。 - Mordechai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接