在Java 8中,函数可以驻留在包中而不定义类吗?
当您有一个函数时,似乎不需要一个类。
我熟悉Java,但对函数式编程还很陌生。谢谢
发布于 2015-07-02 11:38:17
某种程度上来说,但功能并不像函数式编程语言那样是一等公民。
在Java 8中,可以将方法添加到接口或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;
}
}Java8中还有一个名为FunctionalInterface的特殊注释,它可以用于创建一个函数接口,该接口可以在不作为类的成员的情况下按行实现。
如果您真的想在Java中进行函数式编程,因为您希望避免用低阶函数来维护状态,那么您可以始终使这些函数保持静态,然后将该类作为一个包对待。这样,您就不必创建任何对象。
发布于 2015-07-02 11:36:25
不,Java 8中的函数由函数接口表示。函数接口可以由实现该接口的类、实现该接口的单一方法的lambda表达式或方法引用来实现。在所有这些情况下,“函数”的实现都驻留在某个类中。
发布于 2015-07-02 11:52:51
您可以声明一个不能实例化的final class (生成private构造函数),并将函数作为该类的静态方法放在那里。您可以将该类视为函数的“命名空间”。若要在不指定类名的情况下使用它们,可以静态导入该类:
import static com.example.mypackage.MyUtilityClass.*;这种方法在许多Java库和JDK (例如,java.lang.Math类)中得到了广泛的应用。
https://stackoverflow.com/questions/31183444
复制相似问题