jai*_*jai 19 java class instantiation
最近我遇到了一个问题:如何避免实例化Java类?
但是,我回答说:
如果您不想实例化类,请使用"abstract"修饰符.例如:javax.servlet.HttpServlet被声明为抽象(尽管它的方法都不是抽象的)以避免实例化.
声明一个无参数的私有构造函数.
现在我的问题是a)还有其他方法吗?b)为什么任何人都不想实例化一个类?-在SO搜索后,我从知道这个那个的Util类可以做出不实例化.我们不想在OOP中实例化一个类的任何其他地方?
cle*_*tus 28
有四个原因让人想起:
作为(2)的示例,您可能想要创建规范对象.例如,RGB颜色组合.您不想创建任何RGB组合的多个实例,因此您执行此操作:
public class MyColor {
private final int red, green, blue;
private MyColor(int red, int green, int blue) {
this.red = red;
this.green = green;
this.blue = blue;
}
public static MyColor getInstance(int red, int green, int blue) {
// if combo already exists, return it, otherwise create new instance
}
}
Run Code Online (Sandbox Code Playgroud)
注意:不需要no-arg构造函数,因为显式定义了另一个构造函数.
小智 11
不是你的问题的答案,而只是一个注释:
当您创建一个私有的无参数构造函数来阻止实用程序类的实例化时,您应该让构造函数抛出异常(例如UnsupportedOperationException).这是因为您可以通过反射实际访问私有成员(包括构造函数).请注意,如果这样做,则应附带注释,因为定义构造函数以防止实例化类有点违反直觉.
使实用程序类抽象不是一个好主意,因为它使类看起来像是要扩展,而且你可以扩展类,从而实例化它.
| 归档时间: |
|
| 查看次数: |
31784 次 |
| 最近记录: |