我正在查看Java代码,LinkedList并注意到它使用了静态嵌套类Entry.
public class LinkedList<E> ... {
...
private static class Entry<E> { ... }
}
Run Code Online (Sandbox Code Playgroud)
使用静态嵌套类而不是普通内部类的原因是什么?
我能想到的唯一原因是,Entry无法访问实例变量,因此从OOP的角度来看,它具有更好的封装.
但我认为可能有其他原因,也许是表现.可能是什么?
注意.我希望我的条款正确,我会称之为静态内部类,但我认为这是错误的:http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html
内部类比普通类更轻量级,还是最终java像普通类一样编译内部类?
我知道在java类不都是非常轻巧自己,他们占据了PermGen的内存的一部分,所以我想知道这是否是最好用的类似于闭包功能的内部类,或者如果标准类也做得很好?
我正在用java编写一个简单的游戏.我用30 FPS进行了碰撞测试,我必须得到窗口的大小.因为我还没有访问GUI实例,所以我认为我会创建一个共享实例,因为这在Objective-C中非常标准,我来自这里.
class GUI extends JFrame {
private static GUI _sharedInstance;
public static GUI sharedInstance() {
if (_sharedInstance == null) {
_sharedInstance = new GUI();
}
return _sharedInstance;
}
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,它真的很慢.然后我用public static final大小的实例替换了共享实例,它现在可以快速工作,即使是60 FPS或更高.
谁能解释我为什么会这样?
编辑
所以不是打电话GUI.sharedInstance().getWidth(),而是打电话GUI.windowSize.width.我用过了public static final Dimension windowSize.
编辑
这是碰撞检测.所以,int width = GUI.kWindowWidth;我没有打电话,而是在打电话int width = GUI.sharedInstance().getWidth();.
// Appears on other side
if (kAppearsOnOtherSide) {
int width = GUI.kWindowWidth;
int height = GUI.kWindowHeight;
// Slow
// …Run Code Online (Sandbox Code Playgroud)