Использование статических переменных внутри каскадирования

Когда я запускаю свою работу MapReduce, я сохраняю текущую метку времени как объект Date в статической переменной моего основного класса.

Позже, когда я хочу прочитать значение из другого класса (например, моего пользовательского класса каскадного фильтра или каскадной функции), задание вылетает с ошибкой java.lang.NullPointerException в соответствии с Driven.

Нельзя ли получить доступ к статической переменной в каскадной логике? Я понятия не имею, почему это не работает. Переменная Date определенно не равна нулю, поскольку я вывожу ее на консоль при запуске задания, а затем никакая логика не затрагивает ее.

Это класс, который выдает ошибку. Если я создаю новый Date (с текущим временем) в методе opera(), все работает нормально.

public class TimestampAppender extends BaseOperation implements Function {

public TimestampAppender(Fields fieldDeclaration) {
    super(Fields.ARGS);
}

public void operate(FlowProcess flowProcess, FunctionCall functionCall) {

    TupleEntry argument = functionCall.getArguments();

    Date timestamp = Main.timeFrameMiddle;
    String arg0 = argument.getString(0);
    String arg1 = argument.getString(1);

    Tuple result = new Tuple();
    result.addString(arg0);
    result.addString(arg1);
    result.addLong(timestamp.getTime());

    functionCall.getOutputCollector().add(result);
  }
}

person Tim    schedule 04.06.2015    source источник
comment
Я решил проблему, инициализировав статическую переменную в строке объявления. Я знаю, что это очень уродливо, но это работает отлично. Если кто-нибудь знает лучшее решение, пожалуйста, дайте мне знать.   -  person Tim    schedule 09.06.2015


Ответы (1)


неясно, что такое Main.timeFrameMiddle. Не могли бы вы также включить класс Main. Если вы пытаетесь получить текущее время, вы можете сделать это с помощью каскадной функции.

person pramesh    schedule 06.07.2015