gpt4 book ai didi

Java-动态实例化抽象子类

转载 作者:行者123 更新时间:2023-12-01 23:12:58 27 4
gpt4 key购买 nike

我有以下抽象类

public abstract class Document {
private File file;
public Document(File f) {
this.file = f;
}

...

public abstract String parse();
}

目前,我有两个扩展 Document 的类:JsonDocumentXmlDocument

在另一个类 DocumentContent 中,我有一个函数可以迭代一些 json 和 xml 文件的集合,并调用 parse() 函数来提取某些内容。

如何在不使用条件语句的情况下根据检测到的文件扩展名动态实例化 Document 对象?将来还会添加其他文件扩展名,我希望避免每次创建新的 Document 类类型时都需要更新 DocumentContent。

最佳答案

你可以选择是否使用反射,没有反射你需要设计一个构建器,比如:

abstract class DocumentBuilder {
public abstract Document build(File file);
}

HashMap<String, Builder> builders = new HashMap<String, Builder>();
builders.put("xml", new Builder(){
public build(File file) { return new XMLDocument(file); }
});

Builder correctBuilder = builders.get("xml");
if (correctBuilder != null)
return correctBuilder.build()

对于反射,它会类似,但您将使用反射本身提供的 newInstance 工具:

HashMap<String, Class<? extends Document>> builders = new HashMap<String, Class<? extends Document>>();
builders.put("xml", XMLDocument.class);

try {
Document document = builders.get("xml").newInstance();
}
catch (...)

关于Java-动态实例化抽象子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21594632/

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