我有一堆經理類管理不同的對象,如狀態,國家等。 getObjects()
方法返回這些對象的列表,這些列表的值附加在不同的方法,如下面的:Java:可能的對象列表轉換爲字符串列表
//states - StateManager.java
public String getStateMsg() {
StringBuilder msg = new StringBuilder();
if (states != null) {
for (State state : states.getObjects()) {
msg.append(state.getStateCd())).append(" ");
}
}
return msg.toString().trim();
}
//codes - CodeManager.java
public String getCodeMsg() {
StringBuilder msg = new StringBuilder();
if (codes != null) {
for (Code code : codes.getObjects()) {
msg.append(code.getCd()).append(" ");
}
}
return msg.toString().trim();
}
//countries - CountryManager.java
public String getCountriesMsg() {
StringBuilder msg = new StringBuilder();
if (countries != null) {
for (Country country : countries.getObjects()) {
msg.append(countries.get(country.getCountryCd())).append(" ");
}
}
return msg.toString().trim();
}
有明顯的代碼重複,我想使通用的解決方案,其中一個方法接受一個集合(通過檢索getObjects()
)並返回一個字符串列表。
我發現番石榴可以進行某種類型的集合轉換,從一種類型到另一種類型。但示例中的類(州,代碼,國家)不共享任何通用接口。另一方面,一種方法將採集對象和方法名稱來檢索特定對象字段的值,這意味着使用反射不是一個好主意。
因此,我有一個問題,是否有可能避免描述的代碼重複,並建立一個實用的方法,將採取對象的集合和返回字符串的集合?
您能夠創建'State'接口,'代碼','國家'?如果它們都具有相同的通用方法'getCd()',那麼某種接口可能是有意義的。 – Hypino
你有Java 8嗎?如果是這樣,那很容易。如果不是,你不會比這更好。 –
首先,不要讓列表爲空。只需要一個空的列表。然後看一下Lists.transform()和Guava的Joiner類 – keuleJ