【发布时间】:2010-10-20 00:05:15
【问题描述】:
在 Java 中,嵌套类可以是static,也可以不是。如果它们是static,它们不包含对包含实例的指针的引用(它们也不再被称为内部类,它们被称为嵌套类)。
在不需要引用时忘记创建嵌套类static 会导致垃圾收集或逃逸分析出现问题。
是否也可以创建匿名内部类static?还是编译器会自动解决这个问题(它可以,因为不能有任何子类)?
例如,如果我做一个匿名比较器,我几乎不需要对外部的引用:
Collections.sort(list, new Comparator<String>(){
int compare(String a, String b){
return a.toUpperCase().compareTo(b.toUpperCase());
}
}
【问题讨论】:
-
忘记将内部类设为静态时,“垃圾收集或逃逸分析”有哪些问题?我以为这只是关于性能......
-
你的内部类实例保持对其外部实例的引用,即使你不需要它。这可以防止东西被垃圾收集。想象一个创建轻量级实例的(资源密集型)工厂对象。在工厂完成工作后(例如在应用程序启动期间),它可以被处理掉,但只有在它创建的东西没有链接回来的情况下才有效。
-
我知道,这只是一个例子,但由于它是一个重复的例子,应该提到
Collections.sort(list, String.CASE_INSENSITIVE_ORDER)从 Java 2 开始工作,阅读,因为 Collection API 存在......
标签: java syntax inner-classes