我正在构建一个应用程序,它基本上只是一个用于显示和编辑单个对象的 GUI。由于这个对象的类是用JAXB创建的,所以它基本上是一棵树,有许多字符串和整数作为孩子,但也有一些List<E>
s。对于每个简单的子 JAXB 都提供了一个 getter 和一个 setter,但对于所有列表,只提供了一个 getter,因为它提供了对内部列表的引用,现在可以对其进行修改。
由于我需要在单独的Swing GUI 组件中显示每个子项(和分支) ,因此我需要这些视图来处理一些数据。根据我目前对模型视图控制器设计模式的了解,我应该严格地将模型与视图分开。在此之后,让 aJList
直接对我的基础对象的内部列表进行操作将是一个坏主意。(实际上这样做对于我的特定用例来说是一个非常简单的解决方案,但是由于以后可能会添加其他功能,我认为我应该避免这个想法。)
然后我开始思考:如果我不让组件直接在列表上工作,我必须让它们使用原始的副本。但由于我无法将原始列表设置为我的 GUI 组件返回的新列表,因此在将视图数据保存到我的模型时,我必须再次复制这些项目。此外,分发对 custom 内部列表的引用也是不明智的ListModel
,这意味着根据 GUI 结构的深度,可能会多次复制该列表。
由于我还希望我的应用程序高效,因此这似乎也不是正确的方法。如何“正确”构建它?
概括:
from 原始对象是对该
List<E>
对象内部列表的引用。显示
JList
列表不应该得到这个引用,因此它必须复制列表。从 中获取列表
JList
也不应该产生对内部列表的引用,因此必须再次复制它。将列表保存到原始对象必须第三次复制列表,因为原始对象没有列表的 setter 方法。(详情见上文)
我对此的把握正确吗?我如何正确构建它并使其高效?
PS:在原始类结构中添加setter方法不是一种选择!