gpt4 book ai didi

java - 在java中可以将公共(public)代码保留在单独的类中并将方法设置为静态吗?

转载 作者:行者123 更新时间:2023-12-02 10:26:07 25 4
gpt4 key购买 nike

我想知道将通用代码保留在单独的类中并使方法静态是否安全且良好的做法。
我有一个 Car 类,它是根据其他类的输入构建的。创建 Car 对象后,我需要应用一些构造后处理。下面的例子。
Travel 类使用 Car 并调用 postConstructProcessing 方法。
每当创建汽车对象时,CarProcessor 就类似地在其他类中使用。

我的问题是我应该在 CarProcessor 中将方法过程设为静态吗?

Class car{

Type type;
Int model

Car(Type t, int m){
...
...
}

;
....
...}

下面的代码类使用 Car 并调用 postConstructProcessing 方法

public class Travel {
public void go(){
....
....
Car c = new Car(t,m);
new CarProcessor().process(c);
}
}

class CarProcessor{
public Car process(Car c){
If(c.type.value.equals("ABC"){
c.type.version=1.1;
}
if(c.model=5.7){
c.price=50k
}
}
}

我的问题是,在 CarProcessor 中使方法过程静态化是否安全且良好的做法。

最佳答案

总的来说,这不是很好。

最明显的问题是,如果你正在测试 go 方法,你如何替换/模拟 CarProcessor::process?

真正的问题是组织问题。当您下次编码并寻找您希望在“Car”或“go”中看到的功能时,您可以输入“car”。或“走”。进入您的 IDE 并按 ctrl-space,您会期望看到向您显示的所有有趣的方法。你怎么知道要创建一个 CarProcessor 才能继续?

有些事情在面向对象中很难实现——特别是实用程序。查看java库中的整个Math包。它充满了您刚刚调用的静态方法。一个 oo 狂热者会说这些都属于 Number 类(也许类似于“Number.math.sqrt()?”,但 java 没有采取这条路线——事实上,它们甚至没有一个好的通用数字类(我们有一个,不太好)--

但即使我们有像 String 这样的真正的类,我们也倾向于“StringUtil”等。这导致了 String 的大量相互冲突的“Util”实现。在这种情况下,部分问题是 String 是不可变的,我们无法真正用方法回填它(可能是一件好事)。但总的来说,OO 并不适合通用实用方法。

函数(这就是您所提议的)并不出色,但被大量使用。如果您有能力修改业务类,那么这几乎总是更适合此类代码。

澄清一下:函数与方法不同——方法作用于成员(类变量),函数是独立的(也可能是静态的)。

函数是一种非常古老的组织方法。 OO 是一种较新的方法,是为当功能数量过多而变得难以管理(概念上)时发明的。

关于java - 在java中可以将公共(public)代码保留在单独的类中并将方法设置为静态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53946507/

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