0

所以,我想为一个 bean 设置一些属性。我必须设置 25 个变量值。我知道我可以写 25 个集合语句,比如 bean.setProperty()。我想知道是否有更有效或更清洁的方法来做到这一点!

4

3 回答 3

0

如果您知道属性的名称并且它们的名称与设置器匹配,则可以使用反射。

这是一个示例(未测试):

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的一对一映射,因此任何给定索引处的值都适用于同一索引处的属性。propertyvalue

注意:这假定 setter 是使用 Java 中的标准做法生成的(即,名为的属性myName将具有名为setMyName.

于 2012-07-03T22:50:56.777 回答
0

如果所有属性都是普通属性,那么最简洁的方法是使用方法链

但是,如果要创建的对象更复杂,则应考虑使用构建器模式,其描述可在此处找到: http ://rwhansen.blogspot.com/2007/07/theres-builder-pattern-that-约书亚.html

于 2012-07-03T23:13:59.933 回答
0

你在使用 Eclipse 吗?如果是这样,一旦定义了 bean 类和所有类成员,只需右键单击其中一个成员变量,选择 Source,然后“Generate Getter and Setters...”,单击 Select All 按钮,然后单击 OK你就完成了。

在 Java 中,您的选择是 1) 使变量本身公开,然后无法通过方法限制它们的修改,2) 使它们成为受保护/私有的成员变量,并且只能通过 setter 和 getter 方法修改,或者 3) 使它们私有并且只能通过类构造函数设置。

于 2012-07-04T01:34:39.040 回答