有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何解决泛型实例化问题?

我正在为3个文件(如“城市id”、“国家id”、“地区id”、“名称”)制作一个CSV解析器,我面临一个通用的实例化问题。有什么办法可以解决它并坚持干燥吗?(我知道答案可能是在构造函数中取T,但我不知道如何在我的情况下正确使用它)

public static <T> List<T> csvParcer(String filePath) {
    List<T> cities = new ArrayList<>();
    String line;
    String[] dividedLine;
    try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
        reader.readLine();
        while ((line = reader.readLine()) != null) {
            dividedLine = line.replace("\"", "").replace(";", " ").split(" ");
            cities.add(new T(dividedLine[0], dividedLine[1], dividedLine[2], dividedLine[3]));
        }
        return cities;
    } catch (IOException ex) {
    }
    return null;
}

共 (1) 个答案

  1. # 1 楼答案

    这是我能想到的最干燥的版本,使用Java8

    public static <T> List<T> parseCsvFile(String filePath, Function<String[], T> mapper) {
        return Files.lines(new File(filePath).toPath())
                    .map(s -> s.replace("\"", "").split(";"))
                    .map(mapper)
                    .collect(Collectors.toList());
    }
    

    像这样使用

    List<Foo> foos = parseCsvFile("foos.csv", columns -> {
        return new Foo(columns[0], columns[1], columns[2], columns[3]);
    });