gpt4 book ai didi

java - 如何在java运行时创建新添加的类的实例

转载 作者:行者123 更新时间:2023-12-02 03:09:09 24 4
gpt4 key购买 nike

我必须编写一个不同的类来读取不同类型的文件。现在项目已部署在客户端。我们必须支持新文件。所以我们必须创建一个新类,并在服务类中进行修改以创建新添加类的新对象。为新类型的类编写一个新类就可以了。但我不想每次都改变服务等级。对于这种问题有什么解决办法吗?提前致谢。

更新1:这是服务类的代码

 @Service("StockistServiceImpl")
public class StockistServiceImpl implements StockistService {

@Override
@Transactional(propagation = Propagation.REQUIRED,rollbackFor=Exception.class)
public JSONArray saveStockistOrder(Integer stockistId,
MultipartFile[] orderFile, String orderNumber, String orderDate,
String partyCode,String order,Integer userId)
{
List<Pair<String, Integer>> charList = new ArrayList<Pair<String, Integer>>();
Properties code1 = new Properties();
try {
code.load(StockistServiceImpl.class.getClassLoader().getResourceAsStream("categoryOfFile.properties"));
}
catch (IOException e) {
//System.out.println("error in loading divisionNamePdfCode.properties");
e.printStackTrace();
}
String readDuelListedTxtFile = code.getProperty("readDuelListedTxtFile");
String readStartLineLengthForOrderTxtFile = code.getProperty("readStartLineLengthForOrderTxtFile");
String ReadFileWithNoStartLineTxtFile = code.getProperty("ReadFileWithNoStartLineTxtFile");
String ReadStartLineLengthForQtySingleListTxtFile = code.getProperty("ReadStartLineLengthForQtySingleListTxtFile");

if (readDuelListedTxtFile.contains(partyCode
.trim())) {
charList.addAll(dualListText
.readDuelListedTxtFile(
fileName, codeDetails));
}
else if (readStartLineLengthForOrderTxtFile.contains(partyCode
.trim())) {
charList.addAll(lineLength
.readStartLineLengthForOrderTxtFile(
fileName, codeDetails));
}
else if (ReadFileWithNoStartLineTxtFile.contains(partyCode
.trim())) {
T_FileWithNoStartLine noStartLine = new T_FileWithNoStartLine();
charList.addAll(noStartLine
.readFileWithNoStartLineTxtFile(
fileName, codeDetails));
}
else if (ReadStartLineLengthForQtySingleListTxtFile.contains(partyCode
.trim())) {
T_StartLineLengthForQtySingleList noStartLine = new T_StartLineLengthForQtySingleList();
charList.addAll(noStartLine
.readStartLineLengthForQtySingleListTxtFile(
fileName, codeDetails));
}
}

更新 2:这是属性文件,我们从中知道库存商的文件类型是什么。

#fileType,stockistCode
fileType1=ST001,ST009
fileType2=ST002,ST005,ST006
fileType3=ST003,ST007
fileType4=ST004,ST008

我想添加一个像这样的新属性文件来映射带有类名的文件类型,这样如果添加了新类,我们就不必编辑服务类。

#fileType,fullyqualifiedclassName
fileType1=FullyQualifiedClassName1
fileType2=FullyQualifiedclassName2
fileType3=FullyQualifiedClassName3
fileType4=FullyQualifiedclassName4

最佳答案

将文件读取器对象和服务类的创建分开。

public class BuildFileReader() {
FileReader getReader(String xyz) {
FileReader reader;

...
your logic
reader = new WhatEverReaderYouWant();
...

return reader;
}
}

服务类只是询问 BuildFileReader 使用哪个 FileReader,不需要再更改。

public class StockistServiceImpl {
...
BuildFileReader bfr = new BuildFileReader();

FileReader fileReader = bfr.getReader(xyz);

fileReader.readFile(fileName, codeDetails);
...
}

如果每个客户端只需要一种类型的文件读取器,则可以为每个客户端配置 BuildFileReader。如果每个客户端需要多种类型的文件读取器,请为每种类型定义一个接口(interface),并为 BuildFileReader 中的每种所需类型添加 getReaderXYZ() 函数。

关于java - 如何在java运行时创建新添加的类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41319682/

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