我有一個方法,我寫在下面。它使用了大量的instanceof邏輯,但至少我沒有4種相同方法的重載版本。下面的方法會出什麼問題?爲什麼重載方法比使用instanceof更受歡迎?爲什麼重載方法推薦使用java方法中的instanceof運算符?
public static <T extends Number> Number SumVector(List<? extends Number> vector){
if (vector.get(0) instanceof Integer){
Integer retVal = 0;
for (Number val : vector){
retVal = retVal+ ((Integer) val).intValue();
}
return retVal;
}
if (vector.get(0) instanceof Double){
Double retVal = (double) 0;
for (Number val : vector){
retVal = retVal+ ((Double) val).doubleValue();
}
return retVal;
}
if (vector.get(0) instanceof Float){
Float retVal = (float) 0.0;
for (Number val : vector){
retVal = retVal+ ((Float) val).floatValue();
}
return retVal;
}
return null;
}
有一個在軟件設計中的重要模式稱爲[高內聚(HTTP ://en.wikipedia.org/wiki/Cohesion_(computer_science))。你提出的代碼不具有很高的凝聚力。 –
「至少我沒有4種相同方法的重載版本。」我不知道你爲什麼認爲這是一個優勢。您仍然有相同代碼的四個版本。他們只是在一個單一的方法。這不是一個優點,如果你使用了方法重載,運行時'instanceof'測試可以由編譯器完成。 – EJP
@EJP:我不知道編譯器會將我的重載方法轉換爲instanceof檢查。你能否再詳述一下你的評論?謝謝 –