Rah*_*Raj 1 java collections static arraylist comparator
在开始之前,我想指出这篇文章不是重复的:
事实上,我想知道为什么它在我的示例代码中表现得很奇怪.根据我的理解,我们可以实例化一个静态内部类,如下所示:
new OuterClass.InnerClass();
Run Code Online (Sandbox Code Playgroud)
但在我的示例代码中,我能够实例化静态内部类,如:
new InnerClass();
Run Code Online (Sandbox Code Playgroud)
我将把我的示例代码放在这里:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码运行没有任何错误,我按降序输出.任何人都可以解释我如何能够直接实例化这样的静态内部类:new ListComparator();
我在这种情况下期待错误,但对输出感到惊讶.我知道我的静态内部类实现了Comparator接口,但我想知道使它静态会引起与静态类行为的冲突.但令人惊讶的是没有发生,我很好奇为什么它没有发生?
答案很简单,静态内部类与main方法的范围相同.因此,没有必要从GFG明确引用它(尽管你可以,如果你想).
想想这样.如果在GFG中有另一个静态方法,比如static void foo(),则不需要在main方法中将其称为GFG.foo().静态内部类也是如此.