Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在自维护的单例类或始终使用实例中使用此关键字_Java_Android_Singleton_This_Locationmanager - Fatal编程技术网

Java 在自维护的单例类或始终使用实例中使用此关键字

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

我正在实现一个维护自身的单例类,这意味着它有一个私有构造函数和一个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
还是始终
实例.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(与他提到的关注点分开)