如何通过将私有变量作为变量传递给类成员函数来覆盖私有变量?
例如:
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”,以便可以覆盖它?)
答案 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.
}
};