java - 内部类中访问的变量

标签 java android class variables

我有以下代码用于执行 root 命令:

public static String sudo(final String cmd, Context ctx) {
    String output = null;  //init string output
    if (RootTools.isRootAvailable()) {
        if (RootTools.isAccessGiven()) {
            try {
                CommandCapture command = new CommandCapture(0, cmd) {
                    @Override
                    public void output(int id, String line) {
                        Log.d("com.vwade79.aokpdelta.Functions.sudo", "cmd:"+cmd+"\noutput:"+line);
                        if (line.equals("")) {
                            return;
                        }
                        else {
                            output = line;  //ERROR
                        }
                    }
                };
                RootTools.getShell(true).add(command).waitForFinish();
            } catch (Exception e) {
                Toast.makeText(ctx, "There was an error executing root command : "+cmd, Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }
        }
        else {
            Toast.makeText(ctx, "Root permission isn't given!", Toast.LENGTH_LONG).show();
            Intent intent = new Intent(ctx, MainActivity.class);
            ctx.startActivity(intent);
        }
    }
    else {
        Toast.makeText(ctx, "You're not rooted! Come back when you are!", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(ctx, MainActivity.class);
        ctx.startActivity(intent);
    }
    return output;
}

我收到错误:

variable "output" is accessed from within inner class. Needs to be declared final.

我不知道如何分配“内部类”的输出。

最佳答案

错误消息说明了一切:您只能从内部类中访问 final 变量。

一个快速的解决方案是定义:

final String output[] = new String[1];  //init string output

在内部类中:

                        output[0] = line;  // No ERROR :-)

然后:

return output[0];

这是因为数组本身是final的,但是数组的内容仍然可以改变(如果你问我的话,Java中final的定义有点奇怪;final并不意味着不可变)。

关于java - 内部类中访问的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18544831/

相关文章:

java - 在Android中分别选取两张图片

java - ObjectOutputStream 和 PrintWriter 冲突

android - 如何找到图像的顶点(山)

java - java中没有根元素的子元素

java - 如何在 Here Maps SDK Android 中请求和释放音频焦点

java - 类 app.victory ..... 不是封闭类

Python——检查对象是否是某个模块中任何类的实例

c# - 从基类获取子类

java - 访问现有属性返回 null

java - 从具有千位分隔符的字符串中解析数字