1

我有这个类有一个内部类

public class A {
    public class NameComparator implements Comparator<A> {
        @Override
        public int compare(A o1, A o2) {
        return o1.name.compareToIgnoreCase(o2.name);
        }
    }
...
}

而且我想从另一个类 C(它位于 A 之外的另一个包中)访问这个 NameComparator 类。

示例(来自 C):

Collections.sort(aArrayList,A.new NameComparator());

这行不通。我是否应该移动内部类 NameComparator 使其不包含在类 A 中并将其重命名为 ANameComparator 之类的名称?它们是如此密切相关,所以不把这个功能放在 A 类中感觉很尴尬。

4

2 回答 2

5

如果你想像这样使用你的代码,你需要让内部类静态:

public class A {
    public static class NameComparator implements Comparator<A> {
        @Override
        public int compare(A o1, A o2) {
        return o1.name.compareToIgnoreCase(o2.name);
        }
    }
    ...
}

为什么?因为如果你不将内部类标记为静态,它只对外部类的实例有效。

您必须像这样实例化比较器才能在 zour 用例中使用:

Collections.sort(aArrayList,new A.NameComparator());
于 2013-09-21T18:11:35.237 回答
1

您有 2 个选项。

将您的内部类转换为静态嵌套类

public static class NameComparator implements Comparator<A> 

而在C

Collections.sort(aArrayList,new A.NameComparator());

或者,如果您不想修改内部类,只需创建一个A.

Collections.sort(aArrayList,new A().new NameComparator());
于 2013-09-21T18:15:54.850 回答