我很好奇如何能够在不调用方法和对象引用的情况下调用它。
这是我创建的方法:
public void changeAlpha(float f, View v) {
v.animate().alpha(f).setDuration(5000);
}
在这里您可以看到,在 If/elif 流程内部,我正在调用 changeAlpha
,而不是在对象引用上调用它。这怎么可能?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
imageView = (ImageView) findViewById(R.id.dragonImage);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (imageView.getAlpha() == 1) {
changeAlpha(0, imageView);
} else if (imageView.getAlpha() == 0) {
changeAlpha(1, imageView);
}
}
});
}
最佳答案
在Java中,如果你没有明确提及一个对象,就会添加一个隐式的this
。
例如,这是如何调用 findViewById
方法,它相当于 this.findViewById
此外,在本例中,您还有一个 anonymous inner class (扩展 View.onClickListener)。 Java 中的内部类可以访问包含类的方法,这就是为什么您可以在您所做的地方调用changeAlpha。这实际上相当于 ContainingClass.this.changeAlpha
。 ContainingClass.this
是 Java 中引用包含类实例的方式(this
仅引用内部类)。同样,该引用是隐式的,您无需键入它,并且允许访问 changeAlpha 方法。
关于Java - 如何在没有对象引用的情况下使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33715307/