Java 8函数和类

时间:2015-07-02 11:32:34

标签: java function lambda java-8

在Java 8中,函数是否可以驻留在包中而无需定义类?

当你有一个功能时,似乎没有必要上课。

我熟悉Java但不熟悉函数式编程。感谢

4 个答案:

答案 0 :(得分:3)

不,Java 8中的函数由功能接口表示。功能接口可以由实现该接口的类实现,通过实现该接口的单个​​方法的lambda表达式或通过方法引用来实现。在所有这些情况下,“函数”的实现都存在于某些类中。

答案 1 :(得分:1)

您可以声明一个无法实例化的final class(make private构造函数)并将您的函数作为此类的静态方法。您可以将此类视为"命名空间"为了你的功能。要在不指定类名的情况下使用它们,可以静态导入此类:

import static com.example.mypackage.MyUtilityClass.*;

这种方法在许多Java库和JDK中广泛使用(例如,java.lang.Math类)。

答案 2 :(得分:0)

没有。 Java没有函数,只有属于类的方法。

答案 3 :(得分:-1)

排序,但功能并不像函数式编程语言那样独立于一等公民。

在Java 8中,您可以向Interface或Enum添加方法。

public interface Loggable {

    default Logger logger() {
        return LoggerFactory.getLogger(this.getClass());
    }
}


public enum Level {
    HIGH  (3),
    MEDIUM(2),
    LOW   (1)

    private final int levelCode;

    Level(int levelCode) {
        this.levelCode = levelCode;
    }

    public int getLevelCode() {
        return this.levelCode;
    }
}

Java 8中还有一个名为FunctionalInterface的特殊注释,可用于创建一个可以在线实现但不是Class成员的函数接口。

如果你真的想在Java中进行函数式编程,因为你想避免在低阶函数中维护状态,你总是可以将这些函数设置为静态,然后将Class视为一个包。这样您就不必进行任何对象创建。