我正在开发一个应用程序,它将数据写入NoSQL数据库(具体来说是Elasticsearch),我必须管理十几个(随着时间的推移数量会增长)不同的文档类,这些类有许多字段、它们的getter和setter以及将该类转换为JSONObject的方法(每个字段都用
所有这些类都有一些共同的字段和方法,这些都包含在一个超类中(我们称之为
以下是一些最佳情况下传达情况的例子:
鉴于我需要获取和设置这些字段,并且不时地使用它们来操作文档,我从每个
我会提醒自己实现方法并添加所需的字段,但这意味着实现相同集合的所有类都需要具有相同的参数和相同的方法,这意味着我需要多次编写相同的代码(有时比getter和setter方法更多)。
将所有字段添加到
我觉得这是那种可以通过多重继承来解决问题的情况之一,但不幸的是Java不允许使用它。
在这种情况下,我应该如何避免重复?您有什么建议可以改善我的处理方式吗?
@JsonProperty(PROPERTY_NAME)
进行注释,我们使用JSON解析器)。所有这些类都有一些共同的字段和方法,这些都包含在一个超类中(我们称之为
DocZero
),但它们都有自己的自定义字段,这就使我到了这个点。虽然这些字段是定制的,但是有些字段以一种非线性的方式在不同的类之间共享,也就是说,我有我的文档类Doc1
,... DocN
,我有一些字段集合(目前大约有10个)以非常混乱的方式在它们之间共享。以下是一些最佳情况下传达情况的例子:
Doc1
包含 Set1
至 Set5
;
Doc2
包含 Set1
、Set2
和 Set5
至 Set8
;
Doc3
包含 Set6
和 Set7
;
Doc4
包含 Set5
和 Set7
;
Doc5
包含 Set1
、Set2
、Set5
和 Set7
至 Set10
。鉴于我需要获取和设置这些字段,并且不时地使用它们来操作文档,我从每个
Set#
中制作了接口,每个接口都包含(抽象的)setter 和 getter。因此,当我声明一个类时,请参考以下示例:public class DocX implements SetA, SetB, SetC
我会提醒自己实现方法并添加所需的字段,但这意味着实现相同集合的所有类都需要具有相同的参数和相同的方法,这意味着我需要多次编写相同的代码(有时比getter和setter方法更多)。
将所有字段添加到
DocZero
而放弃不同的 Doc#
类是一个解决方案,但我不想使用它,因为我希望区分不同的文档类型,并且由于该情况在代码的另一部分以较小的程度存在,即AnotherDocZero
, AnotherDoc#
和 AnotherSet#
,由于其他约束条件,不能进行合并,并且我希望潜在的解决方案也能够工作。我觉得这是那种可以通过多重继承来解决问题的情况之一,但不幸的是Java不允许使用它。
在这种情况下,我应该如何避免重复?您有什么建议可以改善我的处理方式吗?
Doc2
包含Set2
”,其中Set2
是一个实际的类实例。 - M. Prokhorovadd
方法(因此首先检查参数是否非空)而不是使用设置器。其他非平凡的方法在其他地方管理。 - UkitinuSetX
对象的方法。我建议你在文档中只使用getSetX()
。 - M. Prokhorov