Сделайте конструктор приватным. Создайте статический метод фабрики, который принимает экземпляр класса, к которому разрешен доступ. Пусть фабричный метод создаст подходящий объект и использует settor для объекта, которому разрешен доступ к созданному объекту, чтобы предоставить этому классу созданную копию.
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() );
}
...
}
Кстати, я с подозрением отношусь к этому дизайну. Кажется, слишком сильно связан со мной.