在下面,您可以看到在我的DataCsvLoader中进行的重复。
我有一个没有使用的方法getCsvAsMap。所有的T都是红色的,因为很明显,虽然它可能正在获取Map。
是创建另一个类作为处理程序的唯一方法..专门用于getCsvAsMap方法吗?
辛苦地,Tricky4me
DataCsvLoader:
//
// Read and cache CSVs
//
public Map<Integer, CourseEntity> getAllCourses() {
String csvPath = "courses.csv";
// Create a new course Map with the right Entity type
Map<Integer, CourseEntity> entityMap = new HashMap<>();
repositoryInMem.put(csvPath, entityMap);
// Get data from CSV
EntityLoader<CourseEntity> entityLoader = new EntityLoader<>();
entityMap = entityLoader.readCsv(csvPath);
return entityMap;
}
public Map<Integer, StudentEntity> getAllStudents() {
String csvPath = "students.csv";
// Create a new course Map with the right Entity type
Map<Integer, StudentEntity> entityMap = new HashMap<>();
repositoryInMem.put(csvPath, entityMap);
// Get data from CSV
EntityLoader<StudentEntity> entityLoader = new EntityLoader<>();
entityMap = entityLoader.readCsv(csvPath);
return entityMap;
}
public Map<Integer, TestEntity> getAllTests() {
String csvPath = "tests.csv";
// Create a new course Map with the right Entity type
Map<Integer, TestEntity> entityMap = new HashMap<>();
repositoryInMem.put(csvPath, entityMap);
// Get data from CSV
EntityLoader<TestEntity> entityLoader = new EntityLoader<>();
entityMap = entityLoader.readCsv(csvPath);
return entityMap;
}
public Map<Integer, MarkEntity> getAllMarks() {
String csvPath = "marks.csv";
// Create a new course Map with the right Entity type
Map<Integer, MarkEntity> entityMap = new HashMap<>();
repositoryInMem.put(csvPath, entityMap);
// Get data from CSV
EntityLoader<MarkEntity> entityLoader = new EntityLoader<>();
entityMap = entityLoader.readCsv(csvPath);
return entityMap;
}
public Map<Integer, T> getCsvAsMap(String fileName, Map<Integer, T> entityMap){
// Add the Entity map to the repository in Mem
// The key to each entity map is just it's filename
repositoryInMem.put(fileName, entityMap);
// Get data from CSV
EntityLoader<T> entityLoader = new EntityLoader<T>();
entityMap = entityLoader.readCsv(fileName);
return entityMap;
}
Run Code Online (Sandbox Code Playgroud)
EntityLoader:
public class EntityLoader<T> {
public Map<Integer, T> readCsv(String csvFile){
Map<Integer, T> table = new HashMap<>(); // Fits entire CSV table
int rowCount=0;
try {
String row;
BufferedReader csvReader = new BufferedReader(new FileReader(csvFile));
while ((row = csvReader.readLine()) != null) {
String[] data = row.split(",");
table.put(rowCount++, Arrays.asList(data));
}
csvReader.close();
}catch (FileNotFoundException e){
System.err.println("No file with name " + csvFile +
"Are the CSV files in the root folder? Ex: ReportCard\\courses.csv");
}catch (IOException e) {
System.err.println(e.getMessage());
}
}
}
Run Code Online (Sandbox Code Playgroud)
看起来您不是在执行面向对象的方法。具有相似属性的类应使用抽象。
请按照给定的步骤解决问题。
IEntity
并在所有实体上实现相同的接口。例如,MarkEntity
可以定义为public class MarkEntity implements IEntity {
// class implementation
}
Run Code Online (Sandbox Code Playgroud)
getCsvAsMap()
为以下public Map<Integer, IEntity> getCsvAsMap(String fileName, Map<Integer, IEntity> entityMap){
}
Run Code Online (Sandbox Code Playgroud)
EntityLoader
课程更改为public class EntityLoader<T extends IEntity> {
// Class implementation
}
Run Code Online (Sandbox Code Playgroud)
那应该做。
编辑
如果不可能进行抽象,因为实体不共享任何功能,或者如果实体getCsvMap()
应返回与第二个参数相同的返回类型,则以下替换应可以正常工作。
public <T> Map<Integer, T> getCsvAsMap(String fileName, Map<Integer, T> entityMap)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
70 次 |
最近记录: |