为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建正确的“this”对象作为参数?

如何创建正确的“this”对象作为参数?

慕虎7371278 2021-11-03 16:02:58
我正在尝试编写一个函数,我必须将一个 Activity 对象传递给需要此类参数的方法。通常在这种情况下,我应该只输入“this”,它会自动识别它应该创建哪种类型的对象。但有时这不起作用,无论出于何种原因,它都会重新评估与所需对象不同类型的对象。例如,我实际上在这两种情况下都使用完全相同的方法:if (checkLocationPermission(this)){在第一个中,程序自动将“this”识别为 Activity 对象。这是第二个:@Override            public void onSuccess(Location location) {                if (location == null || !checkLocationPermission(this)){在这种情况下,完全相同的方法将“this”识别为 OnSuccessListener 而不是 Activity。我在同一个程序中的另一个例子是“这个”对象应该是一个 Looper,但它又被识别为一个 OnSuccessListener:fusedLocationClient.requestLocationUpdates(locationRequest,new LocationCallback(),this);我不知道如何为“这个”参数实际选择正确的对象类型,因为我只能输入同一个该死的词。
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

this对应于使用它的对象。onSuccess是一个OnSuccessListener类的方法,因此this指的是OnSuccessListener。您需要使用ActivityName.this. 例如,如果您的活动名称是MainActivity,则


@Override

public void onSuccess(Location location) {

    if (location == null || !checkLocationPermission(MainActivity.this)){


查看完整回答
反对 回复 2021-11-03
?
largeQ

TA贡献2039条经验 获得超7个赞

当您使用匿名内部类(例如侦听器)并使用 时this,它指的是匿名内部类,因为那是您当前的位置。


例如,使用 OnClickListener:


view.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        //"this" here will refer to the OnClickListener instance you create

    }

}

没有什么是用this参数“创建”的。它是对当前封闭类的直接引用。如果需要引用Activity,可以使用:


ActivityClassName.this

只要你在内部类而不是静态类中。


如果您使用 lambda(仅适用于 API 24+):


view.setOnClickListener((v) -> {

    //"this" will reference your Activity because there's no inner class anymore

}


查看完整回答
反对 回复 2021-11-03
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

thethis指的是直接封闭类的对象。所以,如果你有一些interface或class作为函数的参数,我们通常这样做:


functionThatTakesInterfaceOrClassAsArgument( new TheInterfaceOrClass {

    @Override

    public void someMethod () {

        // if you use `this` here, it refers to the object of `TheInterfaceOrClass`

    }


});

如果要使用与封闭类(但不是直接封闭类)对应的对象,请使用 <className>.this


因此,如果封闭的名称Activity是MyActivity,则需要使用MyActivity.this.


查看完整回答
反对 回复 2021-11-03
  • 3 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信