在过去7年的大部分时间里,我一直在进行面向对象编程,在此期间使用Java打开和关闭.有些事情我确信我有很好的把握,比如最有用的设计模式.实际上,下面的代码允许我在一天的时间内创建一个小系统,它将处理我们现在准备实现的一个特定实例,同时具有足够的灵活性来处理我已经被告知的未来需求:
public void importAndArchive(File detectedFile) throws FileNotFoundException, IOException {
File workingCopy = returnWorkingCopy(detectedFile);
List<String[]> csvData = csvData(workingCopy);
setHeaderFields(csvData.get(0));
importData(csvData); //subclass will implement this abstract method
archiveWorkingCopy(workingCopy);
}
Run Code Online (Sandbox Code Playgroud)
我没有表现出上面的夸耀我对模板方法的掌握,而是作为一个起点来讨论我的能力中的差距,这是我的OO设计能力的明显.这种差距是异常处理的系统方法.事实上你可以在那个方法签名中看到我暂时重新抛出一些异常,但实际上我已经在应用程序的另一个角落里根除了同样的东西.
在我走得更远之前,由于这是我第一次特别系统化的尝试,我想对我到目前为止所做的事情进行一些验证.我们的应用程序循环遍历一堆文件,"处理"它们并"归档"它们.非常标准的票价.我为了尽快推出原型而做出的一个决定如下.应用程序根据(ResourceBundled)属性文件中的数据进行初始化.ResourceBundle API中的各种方法抛出未经检查的异常,但我暂时并没有真正处理它们,理由是它们会阻止应用程序启动,并且堆栈跟踪暂时就足够了.
但是我选择了一个用于CSV处理的库,它会抛出已检查的异常.然后,NetBeans很容易将这些异常扩散开始;)以下是我重新编写的一个实际处理这些异常的方法:
private String detectImportHandler(File detectedFile) throws Exception {
String[] firstLine = null;
try {
/*
* CSVReader throws checked exceptions
*/
CSVReader csvReader = new CSVReader(new FileReader(detectedFile));
firstLine = csvReader.readNext();
csvReader.close();
}
catch(Exception x) {
throw new Exception("CSVReader unable to process file: " + x.getMessage());
}
try {
return firstLine[1]; …Run Code Online (Sandbox Code Playgroud)