0

如何通过将私有变量作为类成员函数中的变量传递来覆盖私有变量?

例如:

public class SampleActivity extends Activity {
    private ImageView image1 = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onResume() {
        super.onResume();
        this.onUpdate(image1);
    }

    private void onUpdate(ImageView image) {
        image = new ImageView(this); // I would like to override member variable image1
        // update image1 parameters
    }
};

在上面的例子中,image1 不会被更新(保持为空)。

我的实现:

public class SampleActivity extends Activity {
    private ImageView image1 = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onResume() {
        super.onResume();
        image1 = new ImageView();
        this.onUpdate(image1);
    }

    private void onUpdate(ImageView image) {
        // update image1 parameters
    }
};

在示例 2 中,我每次都需要在 onUpdate 函数之前进行初始化。假设我想为私有变量动态分配,我该怎么办?

有更好的实现吗?(例如,像 C# 一样传递“Ref”以便它可以被覆盖?)

4

3 回答 3

4

在 Java 中,所有参数都是按值传递的。这意味着image1不能在被调用方法中更改 的值;只能更改引用的本地副本。你可以这样做:

@Override
protected void onResume() {
    super.onResume();
    image1 = onUpdate();
}

private ImageView onUpdate() {
    ImageView image = new ImageView(this); // I would like to override member variable image1
    // update image parameters
    return image;
}
于 2013-08-22T07:23:50.333 回答
1

在 java 中没有像引用这样的东西。

在这种情况下,您可以使用 getter 和 setter。

喜欢

public image getImage()
{

return image;
}

public void setImage(Image image)
{
this.image=image;
}
于 2013-08-22T07:25:04.037 回答
0

如果我对您的理解正确,则您不需要输入参数,onUpdate因为您已经有一个引用 delcared ( private ImageView image1 = null;)。尝试这样的事情:

public class SampleActivity extends Activity {
private ImageView image1 = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
protected void onResume() {
    super.onResume();
    this.onUpdate();
}

private void onUpdate() {
    image = new ImageView(this); // I would like to override member variable image1
    // update image1 parameters
    image.invalidate(); //invalidate the imageview so that the changes take place.
}
};
于 2013-08-22T07:29:58.660 回答