所以,我想为一个 bean 设置一些属性。我必须设置 25 个变量值。我知道我可以写 25 个集合语句,比如 bean.setProperty()。我想知道是否有更有效或更清洁的方法来做到这一点!
3 回答
如果您知道属性的名称并且它们的名称与设置器匹配,则可以使用反射。
这是一个示例(未测试):
public String getSetterName(String property) {
StringBuilder methodName = new StringBuilder();
Character firstCharacter = Character.toUpperCase(property.charAt(0));
methodName.append("set").append(firstCharacter).append(property.substring(1));
return methodName.toString();
}
public void callSetters(Bean bean, String properties[], Object values[]) {
for (int idx = 0; idx < properties.length; idx++) {
String property = properties[idx];
Object value = values[idx];
String setterName = getSetterName(property);
try {
Method method = Bean.class.getMethod(setterName);
method.invoke(bean, value);
} catch (NoSuchMethodException nsmE) {
// method doesn't exist for the given property, handle...
} catch (InvocationTargetException itE) {
// failed to invoke on target, handle...
} catch (IllegalAccessException iaE) {
// can't access method, handle...
}
}
}
此代码假定properties
并具有相同的长度,并且具有从到values
的一对一映射,因此任何给定索引处的值都适用于同一索引处的属性。property
value
注意:这假定 setter 是使用 Java 中的标准做法生成的(即,名为的属性myName
将具有名为setMyName
.
如果所有属性都是普通属性,那么最简洁的方法是使用方法链。
但是,如果要创建的对象更复杂,则应考虑使用构建器模式,其描述可在此处找到: http ://rwhansen.blogspot.com/2007/07/theres-builder-pattern-that-约书亚.html
你在使用 Eclipse 吗?如果是这样,一旦定义了 bean 类和所有类成员,只需右键单击其中一个成员变量,选择 Source,然后“Generate Getter and Setters...”,单击 Select All 按钮,然后单击 OK你就完成了。
在 Java 中,您的选择是 1) 使变量本身公开,然后无法通过方法限制它们的修改,2) 使它们成为受保护/私有的成员变量,并且只能通过 setter 和 getter 方法修改,或者 3) 使它们私有并且只能通过类构造函数设置。