#java #csv #generics
Вопрос:
У меня есть четыре метода, которые делают очень похожие вещи. Они читают CSV-файл и возвращают список, но с разными типами. Я хочу их реорганизовать, но не знаю, как это сделать. Может быть, кто-нибудь сможет помочь.
Вот мой код:
public List<PersonFirstName> readPersonFirstNames(Path path) throws FileNotFoundException {
FileReader reader = new FileReader(path.toString());
CsvToBean<PersonFirstName> csvToBean = new CsvToBeanBuilder<PersonFirstName>(reader)
.withType(PersonFirstName.class)
.withSeparator(';')
.build();
return csvToBean.parse();
}
public List<Street> readStreets(Path path) throws FileNotFoundException {
FileReader reader = new FileReader(path.toString());
CsvToBean<Street> csvToBean = new CsvToBeanBuilder<Street>(reader)
.withType(Street.class)
.withSeparator(';')
.build();
return csvToBean.parse();
}
public List<City> readCities(Path path) throws FileNotFoundException {
FileReader reader = new FileReader(path.toString());
CsvToBean<City> csvToBean = new CsvToBeanBuilder<City>(reader)
.withType(City.class)
.withSeparator(';')
.build();
return csvToBean.parse();
}
public List<PersonLastName> readPersonLastNames(Path path) throws FileNotFoundException {
FileReader reader = new FileReader(path.toString());
CsvToBean<PersonLastName> csvToBean = new CsvToBeanBuilder<PersonLastName>(reader)
.withType(PersonLastName.class)
.withSeparator(';')
.build();
return csvToBean.parse();
}
Комментарии:
1. Чего вы хотите добиться от рефакторинга? Вы хотите иметь единый метод для всех типов?
2. да, я хочу создать метод, который я могу вызвать в этих 4 методах, чтобы мой код стал меньше
Ответ №1:
public <T> List<T> read(Path path, Class<T> clazz) throws FileNotFoundException {
FileReader reader = new FileReader(path.toString());
CsvToBean<T> csvToBean = new CsvToBeanBuilder<T>(reader)
.withType(clazz)
.withSeparator(';')
.build();
return csvToBean.parse();
}
Этот метод разделяет общую логику чтения и принимает класс типа результата в качестве дополнительного параметра.
Пример использования:
public List<PersonFirstName> readPersonFirstNames(Path path) throws FileNotFoundException {
return read(path, PersonFirstName.class);
}
Комментарии:
1. Объяснение было бы неплохо