将变量从静态内部类传递给顶级类

时间:2015-05-10 14:46:14

标签: java mapreduce

所以我想从我的静态嵌套类中设置我的顶级类变量foo的值。我的最终目标是弄清楚如何将Map方法中的参数传递给我正在编写的MapReduce程序中的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程序的名称,我最终会在我的Hadoop集群中运行它。

2 个答案:

答案 0 :(得分:0)

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

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

}

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

另一个提示:目前尚不清楚为什么你有一个静态变量top,它有一个非静态的setter,它是通过构造一个调用setter的dummy来从另一个类调用的。为什么不简单Ideone.top = innerString;

答案 1 :(得分:0)

将您的InnerClass定义替换为

public static class InnerClass {

    public void setOuterClassTop() {
        String innerString = "bar";
        Ideone newOne = new Ideone();
        newOne.setTop(innerString );
    }

}

它可以通过调用setOuterClassTop()方法来工作。