java 关键字“this”在此代码中是多余的吗?[复制]

Is java keyword "this" redundant in this code? [duplicate]

提问人:Cícero Augusto 提问时间:10/19/2019 更新时间:10/19/2019 访问量:386

问:

我正在学习一个教程,对“this”关键字的使用有疑问。在类的构造函数中,this.mContext 不是引用关键字的冗余使用吗?简单地使用 mContext 不是一样吗?

//package org.harrix.sqliteexample;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.content.Context;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.File;

public class DatabaseHelper extends SQLiteOpenHelper {
  private static String DB_NAME = "info.db";
  private static String DB_PATH = "";
  private static final int DB_VERSION = 1;

  private SQLiteDatabase mDataBase;
  private final Context mContext;
  private boolean mNeedUpdate = false;

  public DatabaseHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
    if (android.os.Build.VERSION.SDK_INT >= 17)
      DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
    else
      DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";

    this.mContext = context;
    copyDataBase();
    this.getReadableDatabase();
  }

}

java android-studio 这个

评论

2赞 Ruzihm 10/19/2019
是的,这是多余的
2赞 Abion47 10/19/2019
唯一用于访问类成员的情况不是严格冗余的,而是当您避免使用具有相同名称的本地作用域成员时,尽管良好的编程实践应该无论如何都会防止这种情况发生。this
2赞 Dorian Gray 10/19/2019
Abion47,这在 setter 函数中很常见。

答:

0赞 Cícero Augusto 10/19/2019 #1

“唯一使用它来访问类成员并不是严格冗余的时候,就是当你避免使用同名的本地作用域成员时,尽管良好的编程实践应该无论如何都会防止这种情况发生。”

@Abion47

3赞 zain 10/19/2019 #2

是的,它是多余的 但是,如果我们遵循正确的 Java 命名约定,则需要它

 private final Context mContext;

通常应该是

private final Context context;
public DatabaseHelper(Context context) {
    this.context = context
}

这里需要它,以便为实例变量分配参数值。