use*_*979 50 java utility utility-method
我想创建一个带有实用程序方法的类
public class Util {
public static void f (int i) {...}
public static int g (int i, int j) {...}
}
Run Code Online (Sandbox Code Playgroud)
哪个是创建实用程序类的最佳方法?
我应该使用私有构造函数吗?
我应该为抽象类创建实用程序类吗?
我什么都不做?
ini*_*mfs 101
对于Java中的完全无状态的实用工具类,建议类的声明public和final,并有一个私人的构造函数,以防止实例化.该final关键字可防止子类,并可在运行时提高效率.
该类应包含所有static方法,不应声明abstract(因为这意味着该类不具体,必须以某种方式实现).
该类应该被赋予一个与其提供的实用程序集相对应的名称(如果该类要提供各种未分类的实用程序,则为"Util").
除非嵌套类也是一个实用程序类,否则该类不应包含嵌套类(尽管这种做法可能很复杂并且会损害可读性).
该类中的方法应具有适当的名称.
仅由类本身使用的方法应该是私有的.
该类不应具有任何非final/non-static类字段.
该类也可以由其他类静态导入,以提高代码可读性(但这取决于项目的复杂性).
例:
public final class ExampleUtilities {
// Example Utility method
public static int foo(int i, int j) {
int val;
//Do stuff
return val;
}
// Example Utility method overloaded
public static float foo(float i, float j) {
float val;
//Do stuff
return val;
}
// Example Utility method calling private method
public static long bar(int p) {
return hid(p) * hid(p);
}
// Example private method
private static long hid(int i) {
return i * 2 + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
也许最重要的是,每种方法的文档应该是精确和描述性的.很可能经常使用这个类中的方法,并且有很好的高质量文档来补充代码.
mic*_*ldo 15
根据Joshua Bloch(Effective Java),您应该使用始终抛出异常的私有构造函数.这最终会阻止用户创建util类的实例.
不推荐标记类抽象,因为抽象表明读者该类是为继承而设计的.
创建一个类会abstract向您的代码阅读器发送一条消息,告知您希望abstract该类的用户将其子类化。但是,这不是您要执行的操作:不应对实用程序类进行子类化。
因此,在此处添加私有构造函数是更好的选择。您还应该使该类final禁止实用程序类的子类化。
| 归档时间: |
|
| 查看次数: |
88843 次 |
| 最近记录: |