为参数分配属性,但不是通过引用

时间:2013-06-14 16:14:27

标签: java parameters attributes pass-by-reference pass-by-value

我正在使用TextStyleStyler在我正在创建的SWT窗口中提供着色。

我的Styler方法applyChanges()出现问题。该方法(由SWT的作者构建到Styler中的抽象方法)采用TextStyle对象并对其应用格式,例如,如下所示:

public void applyStyles(TextStyle textStyle) {
    textStyle.background = new Color(null, new RGB(102, 0, 58));
    //yada yada
}

但是,我不想直接将样式应用于它,而是指定一个已经包含所有样式的属性。换句话说,我正在尝试这个:

public void applyStyles(TextStyle textStyle) {
    textStyle= this.textStyleAttributeStyle;

}

不幸的是,尽管这不起作用,我认为它与通过引用传递属性有关,因为当我逐个复制属性时,例如像

public void applyStyles(TextStyle textStyle) {
        textStyle.background= this.textStyleAttributeStyle.background;

    }

效果很好!

所以我的问题是,如何在textStyleAttributeStyle中提供每个属性的完整克隆/副本,并以最短的代码将其复制到textStyle中的相应属性?

1 个答案:

答案 0 :(得分:0)

我认为Java Deep Cloning Library可能对您有用,

Cloner cloner=new Cloner();

MyClass clone=cloner.deepClone(o);
// clone is a deep-clone of o