您如何看待以下在java中模拟静态类的方法?您可以添加非静态方法,但无法调用它们.
/**
* Utility class: this class contains only static methods and behaves as a static class.
*/
// ... prevent instantiation with abstract keyword
public abstract class Utilities
{
// ... prevent inheritance with private constructor
private Utilities() {}
// ... all your static methods here
public static Person convert(String foo) {...}
}
Run Code Online (Sandbox Code Playgroud)
这是通常的方式.但是,不需要abstract关键字.使用私有构造函数就足够了
在抽象的关键字表明,类可能的用户执行的类究竟是不是这里的情况的用户.
第4项中有效的Java(一种非常有效的......书)说:
// Noninstantiable utility class
public final class Utility {
private Utility() {
throw new AssertionError();
}
}
Run Code Online (Sandbox Code Playgroud)
因为显式的costructor是私有的:
这AssertionError不是必需的,但它提供了另一个小的好处:它可以防止在类中意外调用costructior.
您还可以创建特定的注释,例如@BagOfFunction,并为您的类注释:
@BagOfFunctions
public final class Utility {
private Utility() {
throw new AssertionError();
}
}
Run Code Online (Sandbox Code Playgroud)
基本上你交换一个自我记录注释的评论.
| 归档时间: |
|
| 查看次数: |
562 次 |
| 最近记录: |