【发布时间】:2018-01-30 14:03:20
【问题描述】:
在我开始之前,我想指出这篇文章不是重复的:
How to instantiate non static inner class within a static method
或
Why instantiation of static nested class object is allowed?
事实上,我想知道为什么它在我的示例代码中表现得很奇怪。 据我了解,我们可以像这样实例化一个静态内部类:
new OuterClass.InnerClass();
但在我的示例代码中,我可以实例化静态内部类,例如:
new InnerClass();
我会把我的示例代码放在这里:
import java.util.*;
class GFG {
static class ListComparator implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2){
if(o1>o2){
return -1;
}
else if(o1<o2){
return 1;
}
else
return 0;
}
}
public static void main (String[] args) {
//code
List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(1);
list.add(2);
list.add(4);
Collections.sort(list,new ListComparator());
for(Integer i : list){
System.out.println(i);
}
}
}
上面的代码运行没有任何错误,我按降序得到输出。 谁能解释我如何能够像这样直接实例化静态内部类:new ListComparator();
我期待在这种情况下会出错,但对输出感到惊讶。我知道我的静态内部类实现了 Comparator 接口,但我想知道将其设为静态会引发与静态类行为的冲突。 但令人惊讶的是没有发生,我很好奇为什么没有发生?
【问题讨论】:
-
为什么会出现错误? ListComparator 在范围内,因此无需限定它。这很像访问静态变量或方法。
-
@Dukeling 感谢您的回复。实际上我想知道我如何能够实例化,特别是如果那是静态类?如何实例化一个静态类? ListComparator 在这里是一个静态内部类。
-
“我如何能够实例化,特别是如果那是静态类” - 那不就是让这成为 this post you linked 的副本吗?
-
好吧,你的意思是说一个静态内部类被当作一个方法来对待。我说的对吗?
-
就范围而言,是的。
标签: java arraylist collections static comparator