限制用户创建类的引用

时间:2013-07-15 18:14:29

标签: java

我们通过将类声明为 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 

    }

}  

5 个答案:

答案 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";
    }