【问题标题】:Cannot use static List<String> within Comparator<String>不能在 Comparator<String> 中使用静态 List<String>
【发布时间】:2014-07-24 21:16:51
【问题描述】:

为什么我必须完全限定静态字段列表中的 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;
        }
    }

错误是“无法对非静态类型字符串进行静态引用”

【问题讨论】:

    标签: java generics comparator


    【解决方案1】:

    您已经定义了一个与类同名的泛型类型参数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 中使用
      • S 的目的是什么,当它应该与 Strings 进行比较时?
      • 没有目的,就是解决办法。
      • @rgettman 好吧,在这种情况下你是完全正确的,我什至会支持你的帖子。我所做的只是在不了解其目的的情况下扫描了 OP 的代码,而是找到了问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 2020-09-03
      • 2020-03-10
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多