我有一堆经理类管理不同的对象,如状态,国家等。 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