Android项目Java类用Context参数时出现“无法解析符号mContext”错误
解决Java版SessionManager中“无法解析符号'mContext'”的问题
我有一个Kotlin编写的SessionManager类,想要将其转为Java实现。写出的Java代码遇到了“无法解析符号'mContext'”的错误,请问该如何解决?
Kotlin原代码
class SessionManager (context: Context) { private var prefs: SharedPreferences = context.getSharedPreferences(context.getString(R.string.app_name), Context.MODE_PRIVATE) companion object { const val USER_TOKEN = "user_token" } /** * Function to save auth token */ fun saveAuthToken(token: String) { val editor = prefs.edit() editor.putString(USER_TOKEN, token) editor.apply() } /** * Function to fetch auth token */ fun fetchAuthToken(): String? { return prefs.getString(USER_TOKEN, null) } }
错误的Java代码
public class SessionManager(Context mContext){ SharedPreferences preferencias=mContext.getSharedPreferences("Preferencias", Context.MODE_PRIVATE); public void saveAuthToken(String token){ SharedPreferences.Editor editor=preferencias.edit(); editor.putString("user_token",token); editor.apply(); } public String fetchAuthToken() { return preferencias.getString("user_token", null); } }
错误原因
Java的类构造方法写法完全错误:
- 类定义后不能直接跟
(Context mContext),这是Kotlin的语法,Java的构造方法是类内部的独立方法,必须写成public SessionManager(Context mContext) {}的形式。 - 成员变量
preferencias在类直接初始化时依赖构造参数,但此时构造参数还未被正确处理,导致编译器无法识别mContext。
修正后的Java代码
import android.content.Context; import android.content.SharedPreferences; public class SessionManager { private final SharedPreferences prefs; // 对应Kotlin中的companion object常量 public static final String USER_TOKEN = "user_token"; // 正确的Java构造方法写法 public SessionManager(Context context) { // 保持和原Kotlin一致,使用app名称作为SharedPreferences的文件名 prefs = context.getSharedPreferences(context.getString(R.string.app_name), Context.MODE_PRIVATE); } public void saveAuthToken(String token) { SharedPreferences.Editor editor = prefs.edit(); editor.putString(USER_TOKEN, token); editor.apply(); } public String fetchAuthToken() { return prefs.getString(USER_TOKEN, null); } }
关键修正点
- 遵循Java类构造方法的语法规范,将构造方法独立写在类内部。
- 把
SharedPreferences声明为类的成员变量,在构造方法中完成初始化。 - 还原原Kotlin中使用
context.getString(R.string.app_name)作为SharedPreferences文件名的逻辑,避免硬编码。 - 用
public static final String实现Kotlin中companion object里的常量定义。
内容的提问来源于stack exchange,提问作者Luis Daniels
相关产品推荐
相关产品推荐

