我目前正在开发一个基于文件的存储库,并试图使其通用化。进退两难的是我如何才能以合适的方式从文件中读取。我试着创建一个类似的界面
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
(传入,以便该方法知道如何转换数据。