2012-02-21 15 views
0

Im 'Exceptionから派生したクラスBrokenObjectExceptionクラスを作成しようとしています。 しかし、Eclipseで、私はこのエラーを取得:シリアライズ可能なクラスBrokenObjectExceptionが長い例外から継承できません

public class BrokenObjectException extends Exception 
{ 
    BrokenObject(String message) 
    { 
     ; 
    } 
} 

の型の静的最終のserialVersionUIDフィールドを宣言しない

それがフィールドを宣言するために私を頼むなぜ私は理解していません。 いくつかのメソッドを宣言するだけのインターフェースは必要ありませんか?したがって、最初のcatchブロックで私が書いた

try { if(...) throw new Exception("wrong"); if(...) throw new BrokenObjectException("wrong"); } catch(BrokenObjectException e) { // do something (action1) throw e; } catch(Exception e) { // so something (action2) throw e; } 

「を実行します。 はとにかく私はそれ私はすべての例外をキャッチする方法とは異なる方法でNAをキャッチしたいので、私の例から私がブロックを持って、このクラスを持ちたいです何か"。 これは、スローされた例外のタイプに応じて、私は別のアクションを実行したいからです。 したがって、BrokenObjectExceptionはExceptionから派生しているため、2回キャッチされます。 しかし、BrokenObjectExceptionがスローされた場合、通常の例外がスローされた場合はaction1とaction2を実行したいと思います。 エラーの解決方法を教えてください。

答えて

2

これはエラーではなく、単に警告です。単純にクラス宣言上記@SuppressWarnings("serial")のアノテーションを使用します。何が起こっている

@SuppressWarnings("serial") 
public class BrokenObjectException extends Exception 
{ 
    BrokenObject(String message) 
    { 
     ; 
    } 
} 

することは、Serializableインタフェースを実装するクラスを拡張していて、完全にその契約に準拠していない場合ので、コンパイラは警告を表示しますです。これを回避するには(このクラスのオブジェクトを直列化したいとは思わないので)、上記のアノテーションを使用してください。

2

私は、eclipseが提供するエラーテキストを強調表示し、シリアルバージョンUUIDを生成するように指示することができます。その後、それはあなたがそれを望む方法だけで動作するはずです。あなたはそれを無視したい場合は

また、あなたは

@SuppressWarnings("serial") 

を使用することができます。しかし、私は先に進み、それを生成することをお勧めします。なぜこのスタックオーバーフローポストをチェックアウトするかについての詳細はこちら。 What is a serialVersionUID and why should I use it?

1

なぜserialVersionUIDフィールドが必要なのですか?それはあなたが求めているものですか?もしそうなら、以下を見てください。link

関連する問題