因此,我想在静态嵌套类中设置顶级类变量foo的值。我的最终目标是弄清楚如何在我正在编写的MapReduce程序中将参数从Map方法传递给Reduce方法。我将代码简化为仅用于可读性的必要元素。

这是我所拥有的:

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
    static String top = "foo";

    public void setTop(String newValue) {
        this.top = newValue;
    }

    public static class InnerClass {
        String innerString = "bar";
        Ideone newOne = new Ideone();
        newOne.setTop(innerString ); //not legal

    }

    public static void main (String[] args) throws java.lang.Exception
    {
        System.out.println("Hello World " + top);
    }
}


在实际的MapReduce程序中,嵌套类将是我的Mapper,而顶级类将是整个MapReduce程序的名称,我最终将Jar并在整个Hadoop集群中运行。

最佳答案

问题不是静态内部类,也不是嵌套类。它是类本身-这将工作:

public static class InnerClass {
    String innerString = "bar";
    Ideone newOne = new Ideone();
    {
       newOne.setTop(innerString ); //not legal
    }

}


或在构造函数中调用setTop。您在示例中选择的语法完全无效。

另一个提示:不清楚为什么有一个静态变量top,它有一个非静态的setter,它是通过构造一个调用setter的虚拟对象从另一个类中调用的。为什么不简单地Ideone.top = innerString;

10-02 02:10