从其他类访问内部类

niz*_*ize 1 java sorting inner-classes comparator

我有这个班有内班

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

我想从另一个类C(它驻留在除A之外的另一个包)中访问此NameComparator类.

示例(来自C):

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

这不起作用.我应该移动内部类NameComparator,以便它不包含在类A中并将其重命名为类似于ANameComparator的类吗?它们是如此紧密相关,所以不将这个功能放在A类中感觉很尴尬.

ppe*_*rka 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);
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

Collections.sort(aArrayList,new A.NameComparator());
Run Code Online (Sandbox Code Playgroud)