在我正在使用Java編寫的程序中,我必須從文件中讀取數據。數據被格式化,以便每行包含構建新對象的所有必要信息。當我分析數據,我有一個代碼塊,看起來是這樣的:Java風格:捕捉一堆稍微不同的錯誤
String[] parts = file.nextLine().split(",");
String attr1 = parts[0];
int attr2, attr3;
try{
attr2 = Integer.parseInt(parts[1]);
} catch (NumberFormatException ex){
System.out.println("Could not parse attr2, got " + parts[1] + ".");
return;
}
try{
attr3 = Integer.parseInt(parts[2]);
} catch (NumberFormatException ex){
System.out.println("Could not parse attr3, got " + parts[2] + ".");
return;
}
ClassA attr4 = null, attr5 = null, attr6 = null;
try{
...
} catch (SomeExceptionType ex){
System.out.println("Could not parse attr4, got " + parts[3] + ".");
}
...
,我發現自己一遍又一遍地重複同樣的簡單try塊。在試圖緩和局勢,堅持DRY原則多一點,我介紹了一些attempt
方法:
int attr2 = attemptGetInt(parts, 1, "attr2");
int attr3 = attemptGetInt(parts, 2, "attr3");
ClassA attr4 = attemptGetClassA(parts, 3, "attr4");
...
// Somewhere in the class
public int attemptGetInt(String[] parts, int index, String name) throws SomeOtherException1{
try{
return Integer.parseInt(parts[index]);
} catch (NumberFormatException ex){
throw new SomeOtherException1("Could not parse " + name + ", got " + parts[index] + ".");
}
}
public ClassA attemptGetClassA(String[] parts, int index, String name) throws SomeOtherException2{
try{
return ...
} catch (SomeExceptionType ex){
throw new SomeOtherException2("Could not parse " + name + ", got" + parts[index] + ".");
}
}
...
即使這種感覺怪怪的,但因爲有很多不同類型的我要,所有返回每種都有相同但略有不同的代碼,每次都需要捕獲一個稍微不同的錯誤(即,我必須創建一個attemptGetClassB
和attemptGetClassC
等等,每次都有類似的代碼)。
有沒有像這樣編寫代碼的優雅方式?
不是。查看[PrintStream](https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html)並記下有多少種打印方法。不幸的是,真的沒有什麼好方法。 – 2014-12-05 03:39:23