4

因此,我的问题是:我需要一种方法来确保只有一个给定的类可以实例化另一个。我不想让另一个嵌套的内部类或类似的愚蠢。我该怎么做呢?我一下子忘记了。

4

4 回答 4

8

私有静态内部类正是您想要的。没什么愚蠢的。

public class Creator {
  private static class Created {
  }
}

否则,您只能在包级别保护实例化。

public class Created {
  Created() {
  }
}

这仅使来自同一包的类可以访问构造函数。

于 2009-01-02T01:46:33.640 回答
1

您可以将要从实例化包中保护的类设为私有。

于 2009-01-02T01:45:26.200 回答
1

将构造函数设为私有。创建一个静态工厂方法,该方法采用允许访问的类的实例。让工厂方法创建一个合适的对象,并在允许访问创建的对象的对象上使用设置器,为该类提供创建的副本。

public class AllowedAccess
{
    private SecureClass secure;
    public setSecureClass( SecureClass secure )
    {
        this.secure = secure;
    }

    ...
}

public class SecureClass
{
     private SecureClass() {}

     public static void Create( AllowedAccess allowed )
     {
          allowed.setSecureClass( new SecureClass() );
     }

     ...
}

顺便说一句,我对这种设计持怀疑态度。对我来说似乎太耦合了。

于 2009-01-02T01:48:38.580 回答
-2

我同意 tvanfosson 的回答以及他关于耦合太高的评论。为什么不通过采用像SpringGuice这样的控制反转框架来保留对类创建过程的更多控制?

恕我直言,使用“new”语句创建类被认为有点......过时了,工厂将是首选,而 IoC 框架则更多。

问候

于 2009-01-02T02:11:28.690 回答