在另一篇文章中,有人告诉我,在使用它的函数“之后”(下)定义一个匿名内部类是错误的。但是,类似下面的内容编译并运行良好:
public class CompTest {
public static void main(String[] args) {
TreeSet<Integer> ts = new TreeSet<Integer>(intComp);
ts.add(1);
ts.add(2);
ts.add(3);
System.out.println(ts.toString());
}
private static Comparator<Integer> intComp = new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
return i2.compareTo(i1);
}
};
}
这方面的官方说法是什么?我的猜测是,既然intComp
是static
,那么当类CompTest
被“加载”时它会被实例化一次(不确定加载是如何发生的,因为只有一个 main 方法并且没有CompTest
构造对象),因此当main()
需要时intComp
,它是可用的不管它在源文件中的哪个位置被实际定义。
即使它确实有效(出于上述原因甚至是不同的原因)......这是不好的做法吗?