我这个班有一个内在的班级

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类中会感到很尴尬。

最佳答案

如果要使用这样的代码,则需要使内部类静态:

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());

08-04 10:46