Java 在自维护的单例类或始终使用实例中使用此关键字
我正在实现一个维护自身的单例类,这意味着它有一个私有构造函数和一个getInstance方法Java 在自维护的单例类或始终使用实例中使用此关键字,java,android,singleton,this,locationmanager,Java,Android,Singleton,This,Locationmanager,我正在实现一个维护自身的单例类,这意味着它有一个私有构造函数和一个getInstance方法 public class GPSTracker implements LocationListener { private static GPSTracker instance; private LocationManager locationManager; private field1, field2 ...; public static GPSTracker getInstan
public class GPSTracker implements LocationListener {
private static GPSTracker instance;
private LocationManager locationManager;
private field1, field2 ...;
public static GPSTracker getInstance() {
if(instance == null)
instance = new GPSTracker();
return instance;
}
...
}
问题1:
由于这个GPSTracker类维护它自己的单例对象(称为instace),我在这个类中实现的每个引用类字段/成员的方法是否都应该使用如下成员:this.field1
还是始终实例.field1
问题2:(类似于1)
正如您在上面的示例中所看到的,我需要覆盖LocationListener中的抽象方法,通常到目前为止,注册到GPS就像:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 1, this);
既然我在同一个类中实现了重写,我是否也需要在这里使用实例单例obejct(而不是这个)
如果您能详细说明原因,我将不胜感激。请使用此
,这样,如果您以后希望它不是一个单例,那么所有代码都不必更改。getInstance()
方法应该是使用静态instance
字段的唯一方法
它叫
getInstance()
方法是唯一关心类的单例方面的方法。答案适用于这两个问题
简短回答:
从技术上讲,这并不重要。使用this.field1
或实例.field1
(在单例情况下)
尽管在这两种情况下(使用this
或实例
对象)它都能正常工作,但更推荐使用this
关键字
详细答案:
考虑到这一点,我意识到这并不重要,在这种情况下,singleton对象将调用引用类成员的方法。
由于singleton对象将是调用方-使用,此.field1
将引用singleton的字段1
即使一个类维护多个对象(来自同一类型的类),只要一个对象调用它的成员,这个
将始终工作并引用调用者的字段。
这就是这个
关键字的全部技巧
结论-更好的做法是使用此.field
而不是实例.field
也给出了一个很好的观点-使用这个
这样,如果将来您将使类成为非单例类,那么您的代码将为它做好准备,并且您不需要将所有实例.field
更改回这个.field(与他提到的关注点分开)