[英]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.