You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
    }
}

关键修正点

  1. 遵循Java类构造方法的语法规范,将构造方法独立写在类内部。
  2. 把SharedPreferences声明为类的成员变量,在构造方法中完成初始化。
  3. 还原原Kotlin中使用context.getString(R.string.app_name)作为SharedPreferences文件名的逻辑,避免硬编码。
  4. 用public static final String实现Kotlin中companion object里的常量定义。

内容的提问来源于stack exchange,提问作者Luis Daniels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:57:37