【问题标题】:Assigning an attribute to a parameter, but not by reference将属性分配给参数,但不是通过引用
【发布时间】:2013-06-11 08:44:24
【问题描述】:

我正在使用 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 中的相应属性?

【问题讨论】:

  • 通过引用传递属性 不,Java 总是按值传递。要实现 by reference 的效果,您需要传递一个引用 textStyle 的对象并更改它,就像您为 Color 所做的那样。
  • 克隆/复制对象的属性:stackoverflow.com/questions/2156120/…

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


【解决方案1】:

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

Cloner cloner=new Cloner();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-14
    • 2019-10-20
    • 2019-12-14
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2021-12-27
    相关资源
    最近更新 更多