Java 从其他类访问内部类

Java 从其他类访问内部类,java,sorting,inner-classes,comparator,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); } } ... } 公共A类{ 公共类NameComparator实现

我有一个内部类

public class A {
    public class NameComparator implements Comparator<A> {
        @Override
        public int compare(A o1, A o2) {
        return o1.name.compareToIgnoreCase(o2.name);
        }
    }
...
}
公共A类{
公共类NameComparator实现了Comparator{
@凌驾
公共整数比较(A o1,A o2){
返回o1.name.compareTignoreCase(o2.name);
}
}
...
}
我想从另一个C类(位于A以外的另一个包中)访问这个NameComparator类

示例(来自C):

Collections.sort(aArrayList,A.newnameparator())


这不管用。我是否应该移动内部类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);
        }
    }
    ...
}

如果希望像这样使用代码,则需要使用内部类static:

public class A {
    public static class NameComparator implements Comparator<A> {
        @Override
        public int compare(A o1, A o2) {
        return o1.name.compareToIgnoreCase(o2.name);
        }
    }
    ...
}
你有两个选择

将内部类转换为静态嵌套类

public static class NameComparator implements Comparator<A> 
或者,如果不想修改内部类,只需创建
A
的实例即可

Collections.sort(aArrayList,new A().new NameComparator());
你有两个选择

将内部类转换为静态嵌套类

public static class NameComparator implements Comparator<A> 
或者,如果不想修改内部类,只需创建
A
的实例即可

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

使
nameparator
a
static
类。或者使用a的实例创建
nameparator
的实例。您需要a的实例
new A()。new NameComparator()
Make
NameComparator
A
static
类。或者使用A的实例创建
NameComparator
的实例。您需要A的实例
new A().new nameparator()
当我尝试此操作时,我的编译器会报告类C的以下问题:Collections.sort(aArrayList,A.new nameparator());“A无法解析为变量”。尝试此操作时,编译器会报告类C的以下问题:Collections.sort(aArrayList,A.new NameComparator());“A不能解析为变量”。第二个选项有效,但当尝试第一个选项(静态)时,我认为它看起来“更好”,我得到了下面对ppeterka的评论中描述的错误。我不会公开内部类,但这是一个设计决策,您有语法错误,这就是为什么不编译!你将如何解决它?额外的外部类?如何以合理的方式绑定功能?这取决于,如果您的类
a
只有私有字段,没有公共访问器或包访问器,那么是的,我将创建一个嵌套类,但可能使用返回该比较器或类似内容的util方法。。如果你有
getters
,那么,是的,我会在一个外部文件中这样做。第二个备选方案可行,但当尝试第一个看起来“更好”的备选方案(静态)时,我认为我得到了下面对ppeterka的评论中描述的错误。我不会公开内部类,但这是一个设计决策,你有一个语法错误,这就是为什么我没有编译!你将如何解决它?额外的外部类?如何以合理的方式绑定功能?这取决于,如果您的类
a
只有私有字段,没有公共访问器或包访问器,那么是的,我将创建一个嵌套类,但可能使用返回该比较器或类似内容的util方法。。如果您有
getters
,那么,是的,我将在外部文件中执行。