我正在开发一个项目(javaFX),其中存在多个bean
类和每个ViewModel
类的bean
类。 ViewModel
将bean
字段映射到Property
字段,我们在该字段中处理/处理应用程序中的数据。 REST服务检索bean
的数据,只有在某处引用它们时才可用(否则,垃圾收集器会吞下它们)。
加载的数据显示在TableView中,取决于搜索条件(=用户输入)。如果处理新搜索 - 与搜索条件无关 - 以前的TableView数据清空 - 因此垃圾收集器会收集所有显示的数据对象。
要立即为多个选定数据对象(例如人员)启用数据处理,我希望将所选数据对象存储到静态容器中,以防止它们被垃圾收集器收集。我想出了单例类 - 但是我不想为每个ViewModel类创建一个单例类。
我已经阅读了多篇关于此的帖子和讨论,并决定实现一个单例类(ContainerUtil
),该类包含HashMap
任何ViewModel类的ViewModel对象列表。该类的String
名称用作Key
,相应的List
用作Value
。
我尝试使用Class<?>
和E
进行不同的实现,但总是遇到类型安全错误,我想阻止它。所以我开始重新考虑我的解决方案,现在我不确定
欢迎任何有关我的方法的建议或批评!
所以这是我的代码:
public class ContainerUtil
{
private static final ContainerUtil instance;
private final Map<String, List<?>> instances_map;
/**
* <p>Constructor of Class {@link ContainerUtil}</p>
* <p>Is private to prevent other methods to instantiate this class!</p>
*/
private ContainerUtil()
{
// only a single instance allowed
this.instances_map = new HashMap<>();
}
static
{
// Instantiates the one allowed instance at application start
instance = new ContainerUtil();
}
/**
* @return The one instance of {@link ContainerUtil}
*/
public static ContainerUtil getInstance()
{
return instance;
}
/**
* <p>Creates (if not existing in the {@link #instances_map}) and returns a list (=container) of objects of the given class<p>
* @param containerClass - The class of which a container is needed
*/
public <E> List<E> getContainerForClass(final Class<E> containerClass)
{
if (!instances_map.containsKey(containerClass.getName()))
{
List<E> container = new ArrayList<>();
instances_map.put(containerClass.getName(), container);
}
return (List<E>) instances_map.get(containerClass.getName());
// ^^^^^^^^^ unchecked type safety warning
}
}
P.S。:我不太确定这篇文章是否更适合Code Review而不是Stack Overflow - 如果有,请通知我。
答案 0 :(得分:0)
TableView
所在的班级保留自己的列表。我不明白为什么没有单身人士就无法存储这些数据。