Java - 如何在没有对象引用的情况下使用方法

标签 java android object methods

我很好奇如何能够在不调用方法和对象引用的情况下调用它。

这是我创建的方法:

 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.changeAlphaContainingClass.this 是 Java 中引用包含类实例的方式(this 仅引用内部类)。同样,该引用是隐式的,您无需键入它,并且允许访问 changeAlpha 方法。

关于Java - 如何在没有对象引用的情况下使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33715307/

相关文章:

java - 单元测试 Spring Cloud Gateway RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder)

java - Android 应用程序, "source not found"调试错误 - 尝试下载 Android 源代码

java - 使用 Assets 从android中的文件中读取

java - jQuery click() 处理程序未按预期工作

java - newInstance() 找不到存在的构造函数

android - AChartEngine 不会显示第二个系列

java - 无法打印出来记录猫

java - 添加两个对象——难以理解接受一个对象作为参数

javascript - 无法将对象转换为数组

java - 从简单的图形格式文本文件创建对象。 java 。迪杰斯特拉算法