在Java 8中,函数是否可以驻留在包中而无需定义类?
当你有一个功能时,似乎没有必要上课。
我熟悉Java但不熟悉函数式编程。感谢
答案 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视为一个包。这样您就不必进行任何对象创建。