0

Exceptionを拡張するパブリッククラスがあります。これは私のカスタムExceptionクラスで、次のようになります。

package com.yahoo.chris511026.paragraphcount;

    public class InputException extends Exception {

    public String getMessage() {

        return "Error: No text entered.";

    }

}

InputExceptionの下には、クラスInputExceptionがlong型の静的な最終バージョンのUIDフィールドを宣言していないことを示す黄色の線があります。私のクラスがSerialiazbleインターフェースを実装していないのに、なぜこれを言っているのですか?この問題を明確に解決するにはどうすればよいですか。コードを変更したり、コードに追加したりする必要はありません。

4

4 に答える 4

4

これは警告であり、エラーではありません。serialVersionUIDシリアル化可能なクラスにフィールドを追加することをお勧めします。また、例外クラスは間接的に拡張および実装されているため、すでにシリアル化可能です。 ThrowableThrowableSerializable

(フィールドを定義しない場合serialVersionUID、JVMはクラスの現在のAPI定義に基づいてオンザフライでフィールドを計算します。これにより、クラスの変更によるシリアルバージョンのUIDの不一致に関する問題に対してより脆弱になります。)

私のクラスがSerialiazbleインターフェースを実装していないのに、なぜこれを言っているのですか?

いいえ、それは言っていません。

この問題を明確に解決するにはどうすればよいですか。コードを変更したり、コードに追加したりする必要はありません。

これに対処するには、次の3つの方法があります。

  • コードを変更したくない場合は、IDEのコンパイラ設定を変更して、この警告を無効にします。

  • serialVersionUIDフィールドを追加します。たとえば、IDEのアクセラレータを使用すると、標準のアルゴリズムを使用して計算するオプションが提供されます。

  • @SuppressWarning適切な注釈を追加します。これは、例外オブジェクトを将来シリアル化する必要が生じる可能性がゼロの場合に適しています。

于 2013-02-11T15:40:08.480 に答える
1

あなたは、その実装を拡張するExceptionものを拡張します。ThrowableSerializable

コメントが多すぎるため、更新してください。

オプション:

  • IDを追加
  • @SuppressWarning("シリアル")
  • 無視するように IDE を構成する
  • まとめて無視
于 2013-02-11T15:37:54.090 に答える
0

Java例外クラスは Serializable インターフェイスを実装しているためです。static final version UIDしたがって、クラス例外の子クラスで宣言する必要があります。

宣言しない場合は、プログラムが自動的に生成します。これはほとんどの状況で問題ありませんが、2 つの例外クラスが同じ UID を生成した場合、またはクラスが変更され、古い例外を古い UID で逆シリアル化した場合に問題が発生する可能性があります。

于 2013-02-11T15:42:03.053 に答える
0

Exception クラスは Serializable インターフェイスを実装し、継承によってクラスも実装します。

シリアル バージョンの一意の ID が存在するのは、同じクラスを逆シリアル化するときに、同じクラスのバージョンを区別できるようにするためです (たとえば、後で新しいメンバーをクラスに追加して、そのメンバーのない古いバージョンと互換性がなくなる場合)。

于 2013-02-11T15:38:06.120 に答える