[英]What is this structure of code in Java?
誰能向我解釋此代碼是哪種類型的結構? 我正在使用Google定位,當我遇到以下代碼時,這對我很有趣:
private LocationCallback locationCallback;
public final void readyToUpdateLocation() {
locationCallback = new LocationCallback() {
public void onLocationAvailability(LocationAvailability p0) {
//do sth here...
}
public void onLocationResult(LocationResult locationResult) {
//do sth here....
}
};
}
public final void startLocationUpdates() {
try {
FusedLocationProviderClient providerClient = this.fusedLocationClient;
providerClient.requestLocationUpdates(this.locationRequest, this.locationCallback, null);
} catch (Exception var2) {
Handle(car2);
}
}
//What exactly LocationCallback class is!
public class LocationCallback {
public LocationCallback() {
}
public void onLocationResult(LocationResult var1) {
}
public void onLocationAvailability(LocationAvailability var1) {
}
}
如您所見,這不是抽象類,也不是要重寫的接口。 沒有覆蓋關鍵字。 那是什么
匿名類中缺少替代。
locationCallback = new LocationCallback() {
@Override
public void onLocationAvailability(LocationAvailability p0) {
//do sth here...
}
@Override
public void onLocationResult(LocationResult locationResult) {
//do sth here....
}
};
現在,該類用於異步使用:稍后調用這兩個方法,並在這兩個事件上調用提供程序。
但是,如果提供者對可用性或結果不感興趣,則不需要覆蓋不需要的回調方法。
如果只有一個回調,則通常使用接口而不是類。
這是一個匿名類。 當您只想重寫某些方法時,可以使用匿名類來擴展不是抽象的類。 它不僅限於接口和抽象類。
LocationCallback是遵循“基本實現”的通常邏輯的類。 通常,原理是定義一個接口:
interface LocationCallback {
void onLocationResult(LocationResult var1);
void onLocationAvailability(LocationAvailability var1);
}
但是,由於此接口定義了兩種方法,您可能只想對提供的兩個事件之一作出反應,因此要求所有用戶每次想對一種方法做出反應時,都要求所有用戶為這兩種方法提供實現的工作量太大了。
為了減少工作量,通常提供一個基類,該基類實現接口的所有方法,並使它們不執行任何操作:
public class BaseLocationCallBack implements LocationCallBack {
@Override
public void onLocationResult(LocationResult var1) {
}
@Override
public void onLocationAvailability(LocationAvailability var1) {
}
}
這樣,回調的用戶可以簡單地擴展BaseLocationCallBack並僅覆蓋他們要覆蓋的方法。 使事情變得簡單。
在您的情況下,他們完全跳過了定義接口的操作,只定義了零實現的基類。 那也行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.