从其他类访问内部类

时间:2013-09-21 18:09:57

标签: 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);
        }
    }
...
}

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

示例(来自C):

  

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

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

2 个答案:

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