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

我正在尝试编写一个函数,我必须将一个 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);

我不知道如何为“这个”参数实际选择正确的对象类型,因为我只能输入同一个该死的词。


慕虎7371278
浏览 170回答 3
3回答

潇潇雨雨

this对应于使用它的对象。onSuccess是一个OnSuccessListener类的方法,因此this指的是OnSuccessListener。您需要使用ActivityName.this. 例如,如果您的活动名称是MainActivity,则@Overridepublic void onSuccess(Location location) {    if (location == null || !checkLocationPermission(MainActivity.this)){

largeQ

当您使用匿名内部类(例如侦听器)并使用 时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}

繁华开满天机

thethis指的是直接封闭类的对象。所以,如果你有一些interface或class作为函数的参数,我们通常这样做:functionThatTakesInterfaceOrClassAsArgument( new TheInterfaceOrClass {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void someMethod () {&nbsp; &nbsp; &nbsp; &nbsp; // if you use `this` here, it refers to the object of `TheInterfaceOrClass`&nbsp; &nbsp; }});如果要使用与封闭类(但不是直接封闭类)对应的对象,请使用 <className>.this因此,如果封闭的名称Activity是MyActivity,则需要使用MyActivity.this.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java