gpt4 book ai didi

java - 将私有(private)方法设为静态以增加函数式编程的习惯

转载 作者:行者123 更新时间:2023-12-01 12:43:22 24 4
gpt4 key购买 nike

我接触了函数式编程范式(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 方法。

<小时/>

问题

那么您对这种方法有何看法?特别是。我将所有私有(private)方法设为静态的新习惯有哪些负面影响 - 在合理范围内,只要我不需要超过 3、4 个参数?

最佳答案

恕我直言,您应该在以下情况下使用静态方法

  • 没有争论(罕见)
  • 无法扩展感兴趣的类别,例如您想为字符串添加一个方法。
  • 您想要向接口(interface)添加方法(Java 8 之前的版本)

否则,静态方法与隐式获取第一个参数的实例方法非常相似。也就是说,您可以简单地将一种转换为另一种。

考虑这些递归方法调用。

class Type {
static ReturnType staticMethod(Type type, Object arg) {
return type.method(arg);
}

ReturnType method(Object arg) {
return staticMethod(this, arg);
}
}

恕我直言,为了清楚起见,您应该尽可能使用实例方法,并将静态方法留给您别无选择的极少数情况。

注意:无论是否使用静态方法,都可以使用函数式编程。要记住的主要原则是 a) 始终将您创建/更改的内容作为返回值返回 b) 不要更改任何参数,包括实例方法的 this

这使您可以灵活地打破这一点;仅更改 this 而不是参数之一(并且仅在必须时才更改)

关于java - 将私有(private)方法设为静态以增加函数式编程的习惯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24886563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com