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

时间:2015-11-15 01:12:34

标签: java android object methods

我很想知道如何在不调用 ON 和对象引用的情况下调用方法。

这是我创建的方法:

 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);
            }
        }
    });


}

2 个答案:

答案 0 :(得分:4)

在Java中,如果您没有明确提及对象,则会添加隐式this

这是例如如何调用findViewById方法,它等同于this.findViewById

此外,在这种情况下,您有anonymous inner class(扩展View.onClickListener)。 Java中的内部类可以访问包含的类'方法,这就是为什么你可以调用changeAlpha的原因。这实际上相当于ContainingClass.this.changeAlphaContainingClass.this是Java中引用包含类的实例的方式(this仅引用内部类)。同样,引用是隐式的,您无需键入它并允许访问changeAlpha方法。

答案 1 :(得分:1)

在您的示例代码中,您从内部类调用该方法。为了这个代码工作,你必须指出它是什么类(隐式或非)。

例如,如果 onCreate 方法属于MainActivity类,则可以通过键入MainActivity.this.changeAlpha

来调用changeAlpha。