【发布时间】:2014-09-13 05:24:39
【问题描述】:
我接触了函数式编程范式(haskell、scala)并喜欢这个概念。我正在尝试将这些功能原则融入我的日常工作中。
这里是一个例子
public class Functional
{
private final Object o1;
private final Object o2;
public Functional(Object o1, Object o2)
{
this.o1 = o1;
this.o2 = o2;
}
/*
* method has side effects
*/
private void method()
{
// o1.someChange();
// ...
// o2.someChange();
}
/*
* method has no side effects - it only uses its parameters
*/
private static void method(Object o1, Object o2)
{
// o1.someChange();
// ...
// o2.someChange();
}
public void work()
{
method(o1, o2);
}
public static void main(String[] args)
{
Functional f = new Functional(new Object(), new Object());
f.work();
}
}
我发现static 方法更易于维护,对于没有编写代码的人来说也是如此,因为他们只需要查看方法参数 - 这在大类中可能是一个优势。另一个小的优势是性能,因为编译后static 方法会被invokestatic 调用,这会稍微快一些。
public 方法仍然保持非静态,因为我不想放弃 OOP/封装。我只是在谈论 private static 方法。
问题
那么你觉得这个方法怎么样?特别是。我将所有私有方法设为静态的新习惯有哪些负面影响 - 在合理范围内,只要我不需要超过 3、4 个参数?
【问题讨论】:
-
这太模糊或太宽泛了。您要求人们将 OOP 风格与函数式编程风格进行比较和对比。您有具体的问题吗?
-
@Raedwald Thx Readwald,那里的一些答案很有用,但我没有新的见解。
-
个人认为这种做法会导致代码有些难看。您需要访问必须作为参数传递的静态方法中的非静态参数,但是您需要的参数越多,它就会变得越丑陋。也许您应该尝试将实际上需要静态的方法设为静态,也许这对您有用。
-
o1.someChange()几乎不起作用,因为这表明传递的参数发生了突变。您可以使用不改变对象或其参数的方法轻松地创建 Java 类。这类似于将对象作为第一个参数的函数。如果您返回未更改的对象、新的对象或值,那么它就可以正常工作。
标签: java oop static functional-programming static-methods