无法编译的源代码 - 变量可能尚未初始化

时间:2018-03-11 03:37:07

标签: java higher-order-functions

我目前正试图让高阶函数工作,但它一直告诉我f可能没有被定义。我的理解是它应该被定义为必须给出以便运行IntApply方法。任何建议将不胜感激。

package iterators;

import java.util.Iterator;

public class IntApply implements Iterator {

    // The function that will be applied to each input element to make an output element
    private final IntApplyFunction f;

    // The Iterator that this Apply object will get its input from
    private final Iterator<Integer> input;      

    public IntApply(IntApplyFunction f, Iterator<Integer> input) {
        while(input.hasNext()){
            f.apply(input.next());
        }
    }

    @Override
    public boolean hasNext() {
        return input.hasNext();
    }

    @Override
    public Integer next() {
        return input.next();
    }

}

1 个答案:

答案 0 :(得分:-1)

您已将finput声明为final,您必须在构造函数/构造函数中初始化它们或删除final关键字。

在这种特殊情况下,由于您将变量作为参数接收,因此可以将其分配给对象变量字段。

public IntApply(IntApplyFunction f, Iterator<Integer> input) {
    this.f = f;
    this.input = input;
    // rest of the constructor
}

您可以在此处查看final关键字是什么。 How does the "final" keyword in Java work? (I can still modify an object.)