我这个班有一个内在的班级
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());