gpt4 book ai didi

java - 如何转换多个函数以创建泛型函数

转载 作者:行者123 更新时间:2023-11-30 07:51:21 25 4
gpt4 key购买 nike

有没有办法将下面的两种方法转换为一个泛型方法,我无法将参数传递给泛型函数初始化

public List<Obj1> csvObjConverter(Reader reader) {
CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.getFormat().setLineSeparator("\n");
CsvParser parser = new CsvParser(parserSettings);
parser.beginParsing(reader);
String[] row;
ArrayList<Obj1> objects = new ArrayList<>();
while ((row = parser.parseNext()) != null) {
Obj1 obj = new Obj1(row).preprocess();
objects.add(obj);
}
parser.stopParsing();
return objects;
}

public List<Obj2> csvObjConverter(Reader reader) {
CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.getFormat().setLineSeparator("\n");
CsvParser parser = new CsvParser(parserSettings);
parser.beginParsing(reader);
String[] row;
ArrayList<Obj2> objects = new ArrayList<>();
while ((row = parser.parseNext()) != null) {
Obj2 obj = new Obj2(row).preprocess();
objects.add(obj);
}
parser.stopParsing();
return objects;
}

我想做类似下面代码的事情,但它不起作用:

public <T extends AbstractObj> List<T> csvObjConverter(Reader r, Class<T> clazz) throws IllegalAccessException, InstantiationException {
CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.getFormat().setLineSeparator("\n");
parserSettings.setHeaderExtractionEnabled(true);
parserSettings.detectFormatAutomatically();
parserSettings.setMaxCharsPerColumn(90000);
CsvParser parser = new CsvParser(parserSettings);
parser.beginParsing(r);
String[] row;
ArrayList<T> objects = new ArrayList<>();
while ((row = parser.parseNext()) != null) {
T obj = clazz.newInstance();
// i need something like -> T obj = clazz.newInstance(row);
objects.add(obj);
}
parser.stopParsing();
return objects;
}

最佳答案

您需要调用非无参数构造函数,因此 clazz.newInstance() 将无法工作。

尝试:

public <T extends AbstractObj> List<T> csvObjConverter(Reader r, Class<T> clazz) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.getFormat().setLineSeparator("\n");
parserSettings.setHeaderExtractionEnabled(true);
parserSettings.detectFormatAutomatically();
parserSettings.setMaxCharsPerColumn(90000);
CsvParser parser = new CsvParser(parserSettings);
parser.beginParsing(r);
String[] row;
ArrayList<T> objects = new ArrayList<>();
Constructor<T> cons = clazz.getConstructor (String[].class);
while ((row = parser.parseNext()) != null) {
T obj = cons.newInstance((Object) row);
objects.add(obj);
}
parser.stopParsing();
return objects;
}

关于java - 如何转换多个函数以创建泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47246155/

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