0
出現此錯誤的(方法addUpdatedListener()
是BaseActivity
):爲什麼方法引用不能應用於子類?
Caused by: java.lang.IllegalAccessError: Method 'void com.example.base.activities.BaseActivity.addOnAccountsUpdatedListener()' is inaccessible to class 'com.example.ui.activities.LoginActivity$$Lambda$1' (declaration of 'com.example.ui.activities.LoginActivity$$Lambda$1' appears in /data/app/com.example-1/base.apk:classes9.dex)
這工作得很好:
public class LoginActivity extends BaseActivity {
...
Observable.interval(UPDATE_INTERVAL, TimeUnit.SECONDS).onBackpressureDrop()
.take(3)
.doOnCompleted(new Action0() {
@Override
public void call() {
LoginActivity.this.addUpdatedListener();
}
})
...
}
但如果我寫這樣的話,會出現錯誤:
Observable.interval(UPDATE_INTERVAL, TimeUnit.SECONDS).onBackpressureDrop()
.take(3)
.doOnCompleted(this::addUpdatedListener);
和像這樣也會發生錯誤:
Observable.interval(UPDATE_INTERVAL, TimeUnit.SECONDS).onBackpressureDrop()
.take(3)
.doOnCompleted(LoginActivity.this::addUpdatedListener);
BaseActivity.class:
public abstract class BaseActivityextends AppCompatActivity{
protected void addUpdatedListener(){
...
}
}
你可以在你的類上運行'javap'嗎?我的猜測是,編譯器在第一種情況下生成額外的代碼,因爲它知道該方法不可訪問,但在第二種情況下不能訪問。 – ngreen