You cannot use static List <String> inside Comparator <String>

Why do I need to fully qualify java.lang.String in static List fields

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;
        }
    }

Error: "Unable to make a static reference to a non-static String type"

+4
source share
2 answers

You have defined a type parameter String, which is the same name as the class, so it Stringrefers to your parameter, and java.lang.Stringit still works.

Remove it from your class, but keep it in the sentence implements.

public static class MyComparator implements Comparator<String> {
+13
source

Replace:

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

for another distinguished name:

public static class MyComparator<S> implements Comparator<String>
+2
source

All Articles