首页 > 解决方案 > 从文件中读取对象,不考虑类型,从泛型类型推断读取方法

问题描述

我目前正在开发基于文件的存储库,并且正在尝试使其通用。困境是我如何以合适的方式从文件中读取。我尝试创建一个类似的界面

public interface SerializableToFile<T> {

  Callable<T> objectFromFileLine(String fileLine, String delimiter);
}

并在域的每个对象中实现它,比如

  public Callable<LabProblem> objectFromFileLine(String fileLine, String delimiter){
    return () -> {
      String[] components = fileLine.split(delimiter);
      LabProblem newEntity = new LabProblem(Integer.parseInt(components[1]), components[2]);
      newEntity.setId(Long.parseLong(components[0]));
      return newEntity;
    };

  }

并且 Repository 是通用扩展 SerializableToFile,例如

FileRepository<T extends SerializableToFile>

现在,问题是,如何使用 objectFromFileLine 方法将文件读取到 Ts 数组?我需要找到一种在每一行上调用我的方法的方法,但我真的不知道如何调用 T.objectFromFileLine 或类似的东西(静态似乎不起作用)。谢谢!

标签: javafilegenerics

解决方案


我猜你正在寻找这样的东西:

public class FileRepository {
    public <T extends SerializableToFile> List<T> readAllLines(File file, SerializableToFile<T> serializableToFile) throws Exception {
        List<String> lines = Files.readAllLines(file.toPath());
        List<T> result = new ArrayList<>();
        for (String line : lines) {
            result.add(serializableToFile.objectFromFileLine(line, " ").call());
        }
    }
}

您需要将转换器作为参考 ( serializableToFile) 传递,以便该方法知道如何转换您的数据。


推荐阅读