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

时间:2013-08-22 07:20:20

标签: java android

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

例如:

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不会更新(保持为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();
        image1 = new ImageView();
        this.onUpdate(image1);
    }

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

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

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

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

在java中没有类似的引用。

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

public image getImage()
{

return image;
}

public void setImage(Image image)
{
this.image=image;
}

答案 2 :(得分: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.
}
};