在 Java 中是否可以以 C++ 模板参数的方式组合这两个静态函数?我尝试过传入类,但这只是给出了不知道类型参数是什么的错误。抱歉,我已经在 google 上搜索了很多内容,但我是 Java 新手,并且很难弄清楚这个问题。
import com.univocity.parsers.common.processor.BeanListProcessor;
import com.univocity.parsers.tsv.TsvParser;
import com.univocity.parsers.tsv.TsvParserSettings;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.List;
public class Parsers {
public static List<ThingOne> ParseThingOne(String fName) throws FileNotFoundException
{
BeanListProcessor<ThingOne> rowProcessor = new BeanListProcessor<ThingOne>(ThingOne.class);
TsvParserSettings tsvSet = new TsvParserSettings();
tsvSet.setHeaderExtractionEnabled(true);
tsvSet.setProcessor(rowProcessor);
TsvParser p = new TsvParser(tsvSet);
FileReader f = new FileReader(fName);
p.parse(f);
return rowProcessor.getBeans();
}
public static List<ThingTwo> ParseThingTwo(String fName) throws FileNotFoundException
{
BeanListProcessor<ThingTwo> rowProcessor = new BeanListProcessor<ThingTwo>(ThingTwo.class);
TsvParserSettings tsvSet = new TsvParserSettings();
tsvSet.setHeaderExtractionEnabled(true);
tsvSet.setProcessor(rowProcessor);
TsvParser p = new TsvParser(tsvSet);
FileReader f = new FileReader(fName);
p.parse(f);
return rowProcessor.getBeans();
}
}
最佳答案
不知道为什么你说通过类(class)对你不起作用。这应该有效:
List<ThingOne> l1 = parse(ThingOne.class, "file1");
List<ThingTwo> l2 = parse(ThingTwo.class, "file2");
public static <T> List<T> parse(Class<T> clazz, String fName) throws FileNotFoundException{
BeanListProcessor<T> rowProcessor = new BeanListProcessor<>(clazz);
TsvParserSettings tsvSet = new TsvParserSettings();
tsvSet.setHeaderExtractionEnabled(true);
tsvSet.setProcessor(rowProcessor);
TsvParser p = new TsvParser(tsvSet);
FileReader f = new FileReader(fName);
p.parse(f);
return rowProcessor.getBeans();
}
关于Java Generic - 如何组合静态函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48770761/