5

例外クラスを作成するときは、「特定の」コンストラクターのみを提供しても問題ありません。

public CircularLinkException(final String msg, final String link)
{
    super(msg);
    link = inputName;
}

または、次のコンストラクターを実装する必要がありExceptionます。

public class CircularLinkException extends Exception
{
    public CircularLinkException() { /* ... */ }
    public CircularLinkException(final String msg) { /* ... */ }
    public CircularLinkException(final Throwable t) { /* ... */ }
    public CircularLinkException(final String msg, final Throwable t) { /* ... */ }
}
4

6 に答える 6

10

使用するすべてのコンストラクターを作成する必要があります。

何かの用途を想像するときは、コードを追加しないでください。必要な場合は追加してください。

http://c2.com/xp/YouArentGonnaNeedIt.html

于 2013-01-14T10:19:14.643 に答える
1

実際には、特定のコンストラクターを実装する必要はありません。例外を構築するために、任意の 1 つを実装できます。

通常、次の 2 つのケースが発生します。

  • あなたのコードは、何かをチェックした後、何かが間違っていたことを認識しています。例外を発生させたい。このような場合、文字列メッセージを受け取るコンストラクターが必要です。通常、問題が発生したことをメッセージで説明することをお勧めします。
  • あなたのコードは何かをしようとし、宣言されていないためそれ以上スローできない例外をキャッチします。その後、メッセージで問題が発生したことを説明し、そこに重要なコンテキスト データを配置できますが、キャッチされた例外を診断のために提供することも重要です。そのような場合には、String と Throwable を取るコンストラクターが必要です。

パラメーターのないバージョンと Throwable のみを取るバージョンは、怠け者向けであり、これらを実装しないことでコードの順序を強化するだけだと思います。

特定の例外が常に利用可能な追加情報から恩恵を受ける場合、コンストラクターには追加のパラメーターが必要であり、この情報を強制的に渡す必要があります。あなたの場合、2 つの文字列パラメーターを持つバージョンを保持する必要がありますが、おそらく、Throwable を 3 番目のパラメーターとしても取るバージョンが適しています。多くの既知の例外 (たとえば、IOException など) は、「この種のコンストラクターは必要ない」ということから、後のバージョンでそのようなコンストラクターを追加することへの苦労を経験しました。

于 2013-01-14T10:22:59.820 に答える
0

クラスにすべてのコンストラクターがある必要はありません。必要に応じてコンストラクターを作成しますが、JavaのExceptionクラスにはデフォルトのコンストラクターがないため、独自の例外(カスタム例外)を作成するときは、常に子クラスの最初の行から親クラスのコンストラクターを呼び出してください。

于 2013-01-14T11:14:36.157 に答える
0

特定のコンストラクターを提供することは問題なく、必要に応じてさらにコンストラクターを追加できます。個人的には、スーパー クラスのすべてのコンストラクターを使用するわけではありません。

しかし、それはすべて、新しい例外クラス「CircularLinkException」がどのように使用されるかによって異なります。この例外クラスが、他のユーザーが使用する例外ライブラリの一部である場合は、「例外クラスからのコンストラクター」+「新しいコンストラクター」を提供することをお勧めします。このようにして、ユーザーは必要に応じてコンストラクターを選択することができます。

あなたがこの例外クラスの唯一のユーザーである場合は、どのコンストラクターがコードに役立つかを分析し、それらだけを作成することをお勧めします。一部のコンストラクターが将来役立つと思われる場合は、将来いつでもそれらを作成できます:)。

于 2013-01-14T11:41:33.987 に答える
0

specificコンストラクターのみを宣言できます。

于 2013-01-14T10:18:43.720 に答える
0

私が理解しているように、あなたは独自の例外を作りたいと思っています

public class CircularLinkException extends Exception

したがって、任意の数のコンストラクターを使用できますがCircularLinkException、それぞれが を呼び出す必要があります。ここでは、ここsuper(smthg)から 4 つのうちの 1 つです。

于 2013-01-14T10:20:13.097 に答える