java - 从文件中读取对象,不考虑类型,从泛型类型推断读取方法
问题描述
我目前正在开发基于文件的存储库,并且正在尝试使其通用。困境是我如何以合适的方式从文件中读取。我尝试创建一个类似的界面
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 或类似的东西(静态似乎不起作用)。谢谢!
解决方案
我猜你正在寻找这样的东西:
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
) 传递,以便该方法知道如何转换您的数据。
推荐阅读
- javascript - 为什么我的 CSS 不适用于我的 React 组件?
- javascript - 如何在没有预先确定的 ViewContainerRef 的情况下向 DOM 动态添加角度组件?
- jupyter-notebook - ipympl 安装在 jupyter-notebook (python3)
- quarkus - 如何在现有的 Spring Boot 应用程序中利用 Quarkus
- sql-server - 如何从 10 到 70 的系统小时和分钟中进行选择
- html - 使用css在div底部的Eclipse形状
- css - 如何将引导程序中的下拉切换移动到最右边?
- ruby-on-rails - 如何在另一个模型中记录一个模型?
- java - @DataJpaTest 无法识别嵌入式 id 中的非空限制
- python-2.7 - 使用 Python 的 Google Dataflow 无法安装工作流:退出状态 1