java中的Util类可以用两种方式构建
class Utils
{
public static ReturnType someUtilMethod(
// ...
}
并通过
执行util方法Utils.someUtilMethod(...);
或者我可以制作
class Utils
{
public Utils(){}
public ReturnType someUtilMethod(
// ...
}
并通过
执行util方法new Utils().someUtilMethod(...)
哪种方式更好?这种方式之间是否存在一些差异?
答案 0 :(得分:11)
一般来说,Util类包含实用程序方法,它不需要存储要处理的Object状态,所以static
方法很适合那里
答案 1 :(得分:2)
效用函数应始终为static
,除非由于某种原因它依赖于某些其他变量的 state ,并且这些变量需要在调用之间记住。
后者应该几乎不会发生,尽管像伪随机数生成器这样的事情可能是个好例子。
Math
函数是效用函数的一个很好的例子。当您致电Math.sin()
时,结果仅取决于提供的参数 。没有涉及“状态”,因此不需要创建对象。
答案 2 :(得分:1)
静态访问将是一种更好的方法,就像Util类保持方法一样,它们不关心对象的属性。
另一个例子是数学课程。
数学课有无实例变量。
并且私有构造函数,因此无法创建任何对象。
因此在Math类中,使用像Math.PI这样的静态访问是合适的。
答案 3 :(得分:0)
如果使用仅具有静态方法的类,则无需在每次需要时使用它来实例化对象,从而节省了一行代码和一些内存。只记得将默认构造函数设为私有,这样就没有人无意中实例化它了!
答案 4 :(得分:0)
实用程序类只是在Java中以语法形式保存全局函数的地方。
“实用工具类”一词未涵盖您的第二个示例。该概念的定义包括该类的不可实例化。
拥有实例方法的原因是动态方法调度(实现多态),或者可能持有一些非全局状态。但是,正如我所说,那么你将超出“实用类”一词的范围。