gpt4 book ai didi

java - 表示对象数组的字段的封装

转载 作者:行者123 更新时间:2023-12-01 13:32:15 26 4
gpt4 key购买 nike

我的类有一个字段,表示对象数组,这些对象以不同的方式实现某个接口(interface)。更准确地说,数组中的每个对象都有一个解析某种类型的文件的方法和一个返回相应支持的文件扩展名的方法。我的类还有一个 Set,它是通过解析文件来填充的。

private MyInterface[] myArray = new MyInterface[] {

new MyInterface() {
@Override
public void parseFile(File file){/*parsing TXT*/}
@Override
public String getSupportedFileExtension(){return "txt";}
},

new MyInterface() {
@Override
public void parseFile(File file){/*parsing XML*/}
@Override
public String getSupportedFileExtension(){return "xml";},

},
};

我采用这种方法的原因是将所有受支持的文件解析功能保留在一段代码中。我希望这个数组可以在类内部和外部使用。

如果我通过 getter 返回此数组,则存在将其设置为 null 等风险并破坏程序。所以问题是:

  1. 如果我将数组设置为最终数组可以吗还是有更好的方法?
  2. 这是一种很好的编程方法还是我应该完全避免这种方法?
  3. 其他人是如何做这样的事情的?

谢谢!

最佳答案

最好的方法是使用 factory pattern 。在您的情况下,您有一个工厂接收文件扩展名并返回一个实现文件解析接口(interface)的对象。这样您就可以在以后添加更多解析器而无需更改代码,并且您只需一个点来请求文件解析功能。

IFileparser parser = ParseFactory.getParser("text")
IContent content = parser.parseFile(file)

您可以扩充工厂以返回支持的文件扩展名,因为工厂知道它所拥有的所有实现。

关于java - 表示对象数组的字段的封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com