因此,我想在静态嵌套类中设置顶级类变量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
;