Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java动态属性表_Java_Json_Serialization_Hashmap - Fatal编程技术网

java动态属性表

java动态属性表,java,json,serialization,hashmap,Java,Json,Serialization,Hashmap,我正在开发一个java应用程序,它需要一个用于动态属性的特殊组件。参数被序列化(使用JSON)并存储在数据库中,然后在运行时反序列化。所有属性都显示在一个包含3列(属性名称、属性类型和属性值)的JTable中,并存储在hashmap中 我目前有两个问题需要解决: hashmap还可以存储对象,并且可以将对象设置为null。如果设置为null,我不知道它们属于哪个类。即使对象为null并且知道它们属于哪个类,我如何存储它们?我是否需要将每个对象包装在一个将保存存储对象类的类中 这些对象在运行时从j

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

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

  • hashmap还可以存储对象,并且可以将对象设置为null。如果设置为null,我不知道它们属于哪个类。即使对象为null并且知道它们属于哪个类,我如何存储它们?我是否需要将每个对象包装在一个将保存存储对象类的类中

  • 这些对象在运行时从json反序列化。问题是有许多不同类型的对象,我实际上不知道将存储在hashmap中的所有对象类型。因此,我正在寻找一种动态反序列化对象的方法。。有这样的方法吗?我是否必须将对象的类存储在序列化的json字符串中

  • 谢谢

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

  • 有一种称为类标记的东西,它使用类对象作为异构容器的键。看看Joshua Bloch的有效Java,第29项。我不确定这种方法如何适用于您,因为您可能有许多相同类型的实例,但我将其作为参考


  • 首先,您能说明为什么对属性使用JSON序列化吗

    在我看来,这种方法在很多方面都是不利的,它会导致数据库搜索和索引出现问题,使数据库查看变得痛苦,并在应用程序中产生不必要的代码。这些问题可能不是问题,这取决于您希望如何使用属性

    对于这种情况,我的解决方案是一个包含以下列的简单表:

  • id-int
  • 属性名称-varchar
  • 然后为每个支持的数据类型添加列:

  • 字符串\u值-varchar
  • 整数值-int
  • 日期值-日期
  • 。。。还有你想要的其他类型的


    这种设计允许使用简单且类型安全的ORM映射实现最高性能,而无需任何序列化或其他样板文件。它可以存储任何类型的值,您只需为属性类型设置正确的列,将所有其他列保留为null。您可以通过在所有数据列中使用null来模拟null值。索引和搜索也是小菜一碟。

    在JTable中,如果属性值是对象,第三列会显示什么?您真正需要的是a)序列化/持久化Java对象还是B)以JSON动态存储数据?另外,请参见此问题,以序列化/持久化java对象-但使用JSON(无需对每个类进行硬编码)