我正在实现一个维护自身的单例类,这意味着它有一个私有构造函数和一个getInstance方法
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
或总是instance.field1
?
问题2 :(类似于1)
正如您所见,在上面的示例中,我需要从LocationListener 覆盖抽象方法,通常直到现在注册到GPS就像:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 1, this);
由于我在同一个类中实现了覆盖,我是否还需要在这里使用instance
单例obejct(而不是这个)?
如果您能说明原因,我会感激不尽?
答案 0 :(得分:3)
使用this
,这样如果您以后希望它不是单身人士,那么所有代码都不必更改。 getInstance()
方法应该是使用静态instance
字段的唯一方法。
getInstance()
方法是唯一关注类的单例方面的方法。
答案 1 :(得分:1)
答案适用于这两个问题。
简答:
从技术上讲,它并不重要。使用 this.field1
或 instance.field1
(在单例中)。
虽然它在两种情况下都是正确的并且相同(使用 this
或 instance
对象)但是更推荐使用 this
关键字。
答案稍长:
考虑到这一点,我意识到它并不重要,在这种情况下,单例对象将调用将引用类成员的方法。
由于单身对象将是来电者 - 使用 this.field1
会引用单身人士 field1
。
即使一个类维护多个对象(来自同一类型的对象),只要对象调用其成员, this
将始终有效并引用调用者& #39; s字段。
这是 this
关键字的全部技巧!
结论 - 更好的做法是使用 this.field
代替 instance.field
Andreas也给了一个好点 - 使用 this
所以如果将来你将使该课程成为非单身人士,那么你的代码就会为你和你准备好我们不需要将所有 instance.field
更改回 this.field
(如他所提到的那样关注他们的分歧)。