我们通过将类声明为 abstract 或使用私有构造函数或任何方法来限制用户创建类的对象
但我的怀疑是如何防止用户甚至创建一个类的引用
例如:
class emp
{
int eno;
}
class Test
{
public static void main(String[] args)
{
emp e;//here User shud not be allowed to create an reference
}
}
答案 0 :(得分:3)
如果您不希望可以从其他软件包访问该类,则可以声明它忽略public
关键字。
所以,而不是将其声明为
public class Test{
//...
}
您可以使用:
class Test{
//...
}
这样只有同一个包中的类才能访问它。有关详细信息,请参阅Controlling Access to Members of a Class。
这将避免引用Test
的其他类(包外),但不会阻止Test
在同一个包中实例化。如果要防止实例化,创建一个私人构造函数,正如其他人已经说过的那样。
答案 1 :(得分:1)
如何防止用户甚至创建类的实例
不知道你将对该类做什么,但你可以通过将构造函数标记为私有来阻止用户不创建类的instane。
答案 2 :(得分:0)
将构造函数设为私有。参考以下代码
class emp
{
int eno;
private emp(){}
}
答案 3 :(得分:0)
使私有构造函数无法解决问题。
您可以提供public
static
方法getInstance()
然后从那里返回类似的实例。
public class Emp{
private Emp(){
}
/*Constructor private? No worries.
We can still create an instance using a public static method.
Just call Emp.getInstance().*/
public static Emp getInstance(){
return new Emp();
}
}
您必须将课程设为abstract
public abstract class Emp{
//Method implementations
}
这不允许使用它自己的构造函数来创建类的实例。但是,我们可以使用派生类构造函数创建此类的实例。
答案 4 :(得分:0)
你为什么要这样做? 首先看一下创建类实例的时间和方式。 - 通常ClassLoader加载并创建类Instance。因此创建了类实例 每个ClassLoader层次结构/每个JVM一次。 但是User可以自由编写自己的ClassLoader加载并创建类对象。所以再次你的 目的尚未完成。
您可能只能限制用户使用类实例。 1.私人内部/嵌套类。这些类在The Outer class之外是不可见的。
有一种方法可以实际限制类Instance的创建 **但它的方法不好** * 在类静态初始化程序*
中抛出运行时异常示例
//Please don't try at home :)
private static class UnloadableClazz {
static {
if(true){
throw new RuntimeException();
}
}
public static String data = "data-value";
}