0

既存のクラスを拡張して例外をスローすることは可能ですか? たとえば、エントリが既に存在する場合、次のコードの例外を作成することは可能ですか? (クラスを変更できないため、メッセージを表示するだけでなく、拡張してエラー処理を含める必要があるのはなぜですか..)

エントリークラス:

public Entry(String paramString1, String paramString2, String paramString3, String paramString4, String paramString5)
  {
    this.firstName = paramString1;
    this.lastName = paramString2;
    this.street = paramString3;
    this.town = paramString4;
    if (paramString5.matches("[A-Z]{2}[0-9]{1,2} [0-9]{1,2}[A-Z]{2}")) {
      this.postCode = paramString5;
    } else {
      System.err.printf("Bad postcode: '%s'\n", new Object[] { paramString5 });
      this.postCode = "???";
    }
  }

アドレスブック クラス:

public String add(Entry paramEntry)
  {
    if (paramEntry == null)
      return "Error: null entry";
    if (this.data.contains(paramEntry)) {
      return "Error: this entry already in the book";
    }
    boolean bool = this.data.add(paramEntry);
    if (bool) {
      return " entry added";
    }
    return "entry could not be added";
  }

私はインターネットを検索し、次の簡単にフォローできる Web サイトを見つけまし 。 -javaカスタム例外の例外クラス/

これは私がしなければならないことですか?(Javaの初心者申し訳ありません)

4

6 に答える 6

2

最初に自問したい質問は、「本当にこれに対して例外をスローしたいのか?」です。例外は、IOException. Validatorユーザー入力を検証するために a を使用するだけです。

于 2013-04-29T12:25:13.217 に答える
1

RuntimeException の sume サブクラスを使用してみることができます。

この場合、親クラスのメソッド シグネチャは同じままですが、サブクラスでこの例外をスローできます。

たとえば、例外コード:

public class MyException extends RuntimeException
{
    public MyException(String message)
    {
        super(message);
    }
}

そしてエントリークラス:

public Entry(String paramString1, String paramString2, String paramString3, String paramString4, String paramString5)
{
    this.firstName = paramString1;
    this.lastName = paramString2;
    this.street = paramString3;
    this.town = paramString4;
    if (paramString5.matches("[A-Z]{2}[0-9]{1,2} [0-9]{1,2}[A-Z]{2}")) {
        this.postCode = paramString5;
    } else {
        throw new MyException(String.format("Bad postcode: '%s'\n", new Object[] { paramString5 }));
    }
}

どこかで例外を処理する必要があります。

try
{
    /* create entry etc. */
}
catch(MyException e)
{
    /* ... */
}

サンプルの Entry も AddressBook も実際には何も拡張していないため、 Entry はサブクラスであると想定しました。

AddressBook も同様の方法で変更できます。

これは、親クラスを変更できない場合の回避策であることに注意してください。親クラスを変更できる場合は、チェック済み例外を使用します。

于 2013-04-29T12:40:32.723 に答える
0

まず第一に、クラスの拡張は例外のスローとは関係ありません。スーパーメソッドが例外をスローしない例外をスローできるかどうかを知りたい場合、答えはノーです。例外がある場合にオーバーライドする方法

于 2013-04-29T12:36:58.187 に答える