Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop - Fatal编程技术网

如何处理具有数百个字段的java类?

如何处理具有数百个字段的java类?,java,oop,Java,Oop,我正在尝试设计一个使用第三方API的程序。第三方API描述了296个字段的输入和179个字段的输出。显然,我想要类来表示输入和输出。设计一个包含这么多字段的类有什么诀窍吗?我应该在每个领域都有一个普通的接受者和接受者吗 注意:因为您提出了要求,API将一个包含固定宽度格式的所有字段的字符串作为输入,并返回一个包含固定宽度格式输出的字符串。很难解释一个非平面结构。 < P>如果最终性能不是杀手标准,我会认真考虑使用两个哈希表。 < P>你可以用 java?UTI.MAP < /St>而不是使用SE

我正在尝试设计一个使用第三方API的程序。第三方API描述了296个字段的输入和179个字段的输出。显然,我想要类来表示输入和输出。设计一个包含这么多字段的类有什么诀窍吗?我应该在每个领域都有一个普通的接受者和接受者吗


注意:因为您提出了要求,API将一个包含固定宽度格式的所有字段的字符串作为输入,并返回一个包含固定宽度格式输出的字符串。很难解释一个非平面结构。

< P>如果最终性能不是杀手标准,我会认真考虑使用两个哈希表。

< P>你可以用<强> java?UTI.MAP < /St>而不是使用SETSUT/GETTER类吗?< /P> < P>哇,这是很多字段。不管怎样


API如何与这个类交互?如果它提供了所需的类结构的实现,那么您肯定应该这样做。

也许可以包装具有大量参数的API方法,并重复应用重构,将逻辑上相关的参数分组到参数对象中,特别是如果结果映射到可以应用的现有模型对象中

Yikes

一种选择是简单地使用地图或类似的财产持有人

另一个选项:使用一系列嵌套类来添加组织(例如Order.Person.ContactInfo.Address.ZipCode,而不仅仅是Order.ZipCode)。我不确定我是否喜欢这个,因为它意味着额外的复杂性,但如果没有它,找到你想要的特定getter/setter(比如通过IDE中的自动完成)将成为一场噩梦

另一个选项:如果您确实创建了一个具有许多属性的单一类,请考虑使用“表达式生成器”模式,其中每个“SETER”返回对象本身,使您能够将SETTER链接在一起:

myObject.setPropertyA("Foo").setPropertyB("Bar").setPropertyC("Baz")...
这样可以创建一个更快、更流畅的界面

myObject.setPropertyA("Foo");
myObject.setPropertyB("Bar");
myObject.setPropertyC("Baz");
...

第三方API必须声明一些类型/类来处理输出数据,对吗?假设这个API是一个Java类,那么显然他们需要从他们的方法返回一个
Output
对象

如果是这种情况,为了与这个API交互,我将创建一个包装器对象

  • 包装输入字段/对象和输出对象
  • 只有我的程序关心与之交互的字段的公共访问器方法(我觉得您不需要访问所有296个字段)

  • 这样,程序的其余部分只需要知道它需要知道的字段的存在,其余字段(以及第三方对象本身)完全隐藏/抽象了。

    代码生成如何?使用输入参数创建一个文件,使用输出参数创建另一个文件。然后创建您想要的任何代码模板:getter、setter、constants。然后将两者相乘


    如果您需要重新构建它,只需修改模板并重新生成。

    如果它只是一个容器类,我会将您的字段公开,这样您就可以直接修改它们,避免使用所有的样板方法。还有,字段名有296个常量吗?此外,由于字段具有不同的语义类型(文本、数字等),因此我必须对值进行一些抽象。如果您需要在代码中与字段名进行比较,例如,您可能必须创建常量。@Dane一点不错,但我通常使用反射,有时使用属性。API需要一个血淋淋的字符串,所有这些字段都设置为固定宽度格式。没有真正的帮助。我很抱歉:(祝你好运…+1有助于构建器模式的流畅性。我忘了在我的答案中扔掉它。
    EnumMap
    应该很快(我猜,枚举序号的非线性读取可能是最糟糕的部分;但这可能比针对不同字段的不同代码要好)。请参见问题的编辑。@C.Ross,您的应用程序是否关心来自此第三方API的每一个输入和输出?95%用于某个地方或另一个地方,如果只是为了记录以便用户可以看到它们的话。