1

デフォルトのコンストラクターが Java で使用されないようにするにはどうすればよいですか?

私の評価では、次のように述べています。

"We don't want the user to use the default constructor since the user has to specify the HashCode, and maximum load factor"

これでうまくいくと思いましたが、どうやらそうではありません(辞書は例外をスローするために使用されるクラスです):

public boolean HashDictionary() throws DictionaryException {}

DictionaryException クラス:

public class DictionaryException extends Throwable {

}

デフォルトのコンストラクター (講師提供) を使用したときに例外がスローされることを確認するためにテストします。

try
{
    HashDictionary h = new HashDictionary();
    System.out.println("***Test 1 failed");

}
catch (DictionaryException e) {
        System.out.println("   Test 1 succeeded");
}

私はそれを行う方法に慣れていないので、これを行う方法を知りたいだけです。ありがとう。

4

7 に答える 7

5

呼び出されたくない場合は、デフォルトのものをプライベートとして宣言できます。

コメントに答えるために、例外をスローできます-

public HashDictionary() throws DictionaryException {
    throw new DictionaryException("Default constructor is not allowed.");
}
于 2013-10-21T14:32:12.783 に答える
3

あなたはできる

a) デフォルトのコンストラクタを省略

b) デフォルトのコンストラクターを非公開にする

c) デフォルトのコンストラクターが使用されている場合に例外をスローする

public HashDictionary() throws DictionaryException {
    throw new DictionaryException("Default constructor should not be used!");
}
于 2013-10-21T14:34:16.517 に答える
1

そのようにしないでください。デフォルトのコンストラクターを非公開にするだけです。

private HashDictionary() {}

編集:booleanコンストラクター定義で何をしていましたか? コピペしただけなのに…

于 2013-10-21T14:33:30.593 に答える
0

ユーザーにデフォルトのコンストラクターを使用させたくない場合は、他のデフォルト以外のコンストラクターが宣言されている場合はコンストラクターを省略するか、デフォルトのコンストラクターを作成できますprivate

あなたが抱えている可能性のあるもう1つの問題は、質問に入れた宣言がコンストラクターではなく、メソッドであることです。コンストラクターには戻り値の型がありません。

これを変える

public boolean HashDictionary() throws DictionaryException {}

これに

public HashDictionary() throws DictionaryException {}

さらに良いことに、それを変更するだけです

private HashDictionary() {}

そして、クラス自体の外では誰もアクセスできません。

于 2013-10-21T14:36:24.900 に答える
0

私はこれを追加しました:

 public DictionaryException(String error_string)
 {
     System.out.println(error_string);
 }

DictionaryException のデフォルトのコンストラクタとして

その後:

public HashDictionary() throws DictionaryException {
    throw new DictionaryException("Default constructor should not be used!");
}

これは、HashDictionary のデフォルト コンストラクターの場合、型がブール値であることが問題だったので、それを削除したところ、うまくいくように見えました。

于 2013-10-21T15:00:16.407 に答える
0
  1. デフォルトのコンストラクターがクラス外から呼び出されることを禁止するには、次を使用します。

    プライベート HashDictionary(){}

  2. クラスからでもデフォルトのコンストラクターを呼び出すことを禁止するには、次を使用します。

    パラメーター化されたコンストラクターを宣言し、パラメーター化されていないデフォルトのコンストラクターをクラス内に記述しないでください。public HashDictionary(String string){ }

  3. コンストラクターの呼び出し中に例外をスローする場合は、次のようにします。

    public HashDictionary() throws Exception {
    throw new Exception("コンストラクターからの例外のスロー");
    }

よろしく、ビレンドラ。

于 2013-10-21T15:15:35.073 に答える
0

デフォルトのコンストラクターを使用したくないが、クラスをインスタンス化したい場合は、カスタム コンストラクターを実装する必要があります。有効なインスタンスを作成するために何が必要かをユーザーに伝える必要があります。以上です!デフォルトのコンストラクターは使用できなくなります。コンストラクターのロジックが複雑すぎる場合は、プライベート コンストラクターを含むプライベート メソッドを自由に抽出してください。インスタンスを作成する方法がたくさんある場合は、静的なファクトリのようなメソッドとプライベート ctor を使用できます。デフォルトのものを無効にするためだけにプライベートctorを作成することは意味がありません(少なくとも私にはわかりません)。

クラスをインスタンス化したくない場合 (つまり、デフォルトの ctor を使用したくなく、カスタム ctor を作成する理由がないということです)、これは、静的フィールド/メソッドのみを使用する必要があることを意味するため、クラス全体を静的にします.

ああ、非抽象クラスについて話していると思います。

于 2013-10-25T09:22:54.397 に答える