Java的动态属性表(java dynamic attributes table)

2019-10-17 02:39发布

我正在开发需求动态属性的特殊组件的Java应用程序。 的参数被序列化(使用JSON)和存储在数据库中,然后在运行时反序列化。 所有属性都显示在一个JTable 3列(属性名,属性类型和属性值),并存储在HashMap中。

我目前有两个问题要解决:

  1. HashMap中还可以存储对象和对象可以被设置为null。 如果设置为null,我不知道他们属于哪一类。 我怎么能存储对象,即使它们是空的,并知道他们属于哪一类? 我是否需要包装每一个对象,其将持有的类存储对象的一类?

  2. 该对象从JSON在运行时反序列化。 这里的问题是,有许多不同类型的对象,我真的不知道将要存储在HashMap中所有对象类型。 所以我在寻找一种方式来动态地反序列化对象..有这样一种方式? 请问我得的类的对象存储在序列化JSON字符串?

谢谢!

Answer 1:

  1. 看看到Null对象模式 。 您可以使用一个额外的类来表示你的类型的空实例,仍然可以包含关于自身的信息。

  2. 有一种叫做类令牌 ,它是利用类对象作为异类集装箱键。 看看到有效的Java约书亚布洛赫,第29项 。 我不知道这种方法如何能为你工作,因为你可能有相同类型的多个实例,但我把它作为一个参考。



Answer 2:

首先,你可以激励你为什么使用JSON序列化的属性?

这种方法的缺点在我看来许多方面,它可能会导致数据库搜索和索引的问题,使数据库在应用程序中查看痛苦和CAU的不必要的代码。 这些问题可能不是一个问题,这取决于你想如何使用你的属性。

我像这些情况的解决方案是含像列的简单表:

  1. ID - INT
  2. 属性名称 - VARCHAR

然后添加列每个支持的数据类型:

  1. STRING_VALUE - VARCHAR
  2. integer_value - INT
  3. DATE_VALUE - 日期

......你想要的任何其他类型。

这种设计允许使用简单和类型安全的ORM映射没有任何序列化或其他样板最高的性能。 它可以存储任何类型的值,您只需设置正确列的属性类型,而所有其他与空。 您可以通过在所有数据列使用空模拟空值。 索引和搜索也成为小菜一碟。



文章来源: java dynamic attributes table