我这个班有一个内部类
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类中感觉很尴尬。
答案 0 :(得分: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());
答案 1 :(得分:1)
您有2个选项。
将内部类转换为静态嵌套类
public static class NameComparator implements Comparator<A>
并在C
Collections.sort(aArrayList,new A.NameComparator());
或者,如果您不想修改内部类,只需创建A
的实例。
Collections.sort(aArrayList,new A().new NameComparator());