简而言之,主类是JMapViewer
,它是JPanel
的扩展。还有另一个非常重要的类,称为DefaultMapController
,它充当主类的MouseListener
。
我注意到的第一个奇怪的事情是查看器没有对控制器的引用。JMapViewer
构造函数实例化DefaultMapController
的匿名实例,如下所示:
public JMapViewer() {
// other stuff
new DefaultMapController(this);
}
在我看来,这似乎是一个糟糕的设计选择,因为控制器有大量的方法(选项、切换等--如下所示的示例),这些方法现在根本无法访问,那么它们有什么好处呢?
public void setMovementMouseButton(int movementMouseButton) {
// changes which mouse button is used to move the map
}
然而,后来我想到了更奇怪的事情!如果监听器的这个匿名实例没有引用,为什么还允许它生存呢?难道GC不应该迅速摧毁它吗?或者GC是否足够聪明,知道引用活动的JComponent
的侦听器类也必须保持活动才能正常工作,即使由于某种奇怪的原因它没有名称?
所以,两个真正的问题:
抽象父级JMapController
保存对JMapViewer
的引用,该引用由DefaultMapController
构造函数传递到:
public DefaultMapController(JMapViewer map) {
super(map);
}
附录:控制器持有的map
引用用于(有选择地)将最多三个控制器引用添加到映射的EventListenerList
,这里将讨论这些引用。其中任何一个都将排除GC。至少一个有益的设计好处是,具体的JMapController
只需要实现可用的接口。
正如本MVC大纲中所建议的那样,给视图一个对控制器的引用是不寻常的。相反,让控制器注册为视图的监听器并没有什么问题,就像这里建议的那样。
问题内容: 我一直在仔细阅读的开源代码。如果有人希望查看它,请检查SVN。 简而言之,主要类是,这是a的扩展JPanel。还有一个非常重要的类称为,它充当主要类的。 我注意到的第一个奇怪的事情是查看器没有对控制器的引用。该构造器实例的一个匿名实例,就像这样: 在我看来,这是一个糟糕的设计选择,因为控制器具有大量的方法(选项,切换等-如下所示的示例),这些方法现在根本无法访问,那么它们有什么用? 控
本文向大家介绍GC是什么? 为什么要有GC?相关面试题,主要包含被问及GC是什么? 为什么要有GC?时的应答技巧和注意事项,需要的朋友参考一下 答 GC(Garbage Collection) GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: 当程序需要更多的堆空间时,GC需要进行垃圾清理工作,暂停所有线程,找出所有无被引用的对象,进
本文向大家介绍请问GC是什么? 还有为什么要有GC?相关面试题,主要包含被问及请问GC是什么? 还有为什么要有GC?时的应答技巧和注意事项,需要的朋友参考一下 考察点:回收 GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存
问题内容: 为了使AngularJS在IE7和IE8中工作,我向ng-app元素添加了id =“ ng-app”和class =“ ng-app”: 过去一直如此,但是现在我将class =“ ng-app”添加到了两个不同的项目中,并且在这两个视图中不再在任何浏览器中呈现该视图。IE7 / 8兼容性的方式已更改吗?我正在使用CDN的1.0.2版本。 谢谢。 问题答案: 编辑说明: 添加docty
本文向大家介绍Minor Gc和Full GC 有什么不同呢? 相关面试题,主要包含被问及Minor Gc和Full GC 有什么不同呢? 时的应答技巧和注意事项,需要的朋友参考一下 新生代 GC(Minor GC):指发生新生代的的垃圾收集动作,Minor GC 非常频繁,回收速度一般也比较快。 老年代 GC(Major GC/Full GC):指发生在老年代的 GC,出现了 Major GC
问题内容: 根据JLS: 15.9.5匿名类声明编译器会自动从类实例创建表达式派生匿名类声明。 匿名类从不抽象(第8.1.1.1节)。匿名类始终是内部类(第8.1.3节);它永远不是静态的(第8.1.1节,第8.5.2节)。 匿名类始终是隐式最终的(第8.1.1.2节) 。 这似乎是一个特定的设计决定,所以它有一定的历史。 如果我选择上这样的课: 如果选择的话,为什么不允许我再次对其进行子类化?