4

私はライブラリを開発していますが、ユーザーがnewキーワードを使用してクラスのインスタンスを直接作成するのではなく、オブジェクトを作成するための特別なメソッドがあります。したがって、ユーザーがnewキーワードを使用してクラスをインスタンス化すると、コンパイラーがエラーを出す可能性があります。例えば:

public class MyClass {
    private MyClass(int i) {  }

    public MyClass createMyClassInt(int i) {
        return new MyClass(i);
    }

    private MyClass(double d) { }

    public MyClass createMyClassDouble(double d) {
        return new MyClass(d);
    }
}

したがって、ユーザーがインスタンス化しようとするMyClass myClass = new MyClass();と、コンパイラーはエラーを出します。

4

2 に答える 2

11

コードはほぼ問題ありません。必要なのは、createメソッドを静的にして、戻り値の型を指定することだけです。

public static MyClass createMyClassInt(int i) {
  return new MyClass(i);
}

public static MyClass createMyClassDouble(double d) {
  return new MyClass(d);
}

新しいインスタンスを作成するために呼び出し元がインスタンスへの参照を持っている必要ないように、メソッドは静的である必要があります:)

編集:コメントに記載されているように、クラスを作成することもおそらく価値がありfinalます。

于 2012-09-05T11:54:09.127 に答える
3

特別なメソッドでクラスを作成したいのなら、なぜファクトリデザインパターンを使わないのですか?クラスの新しいインスタンスを返すクラス内の静的メソッド

デフォルトのコンストラクターで新しいクラスを作成したくないだけで、ユーザーにパラメーター付きのクラスを使用するように強制したい場合は、デフォルトのコンストラクターを実装しないでください。

于 2012-09-05T11:55:43.797 に答える