2016-08-31 13 views
0

SonarQubeは以下のバグを返します。汎用型をシリアライズ可能にする方法は?

"タイプ"を一時的または直列化可能にします。次のクラスで

:のように、様々な列挙実装で

public interface IAType { 

} 

public enum OneIAType implements IAType, Serializable { 

    GENERIC 

} 

クラスがで使用され

@XmlRootElement 
public class InsuredAmount<T extends IAType> implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private T type; 
} 

IATypeインタフェースでありますRESTインタフェースであるため、Serializa ble。

私の質問1.このクラスをRESTインターフェイス経由で転送しているので、型をトランジェントとしてマークすることはお勧めしません。このタイプを一時的にマークすると問題になることはありますか? 2.どのようにして型をシリアライズ可能にすることができますか?

+3

(https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html# [交点タイプ]として型変数を宣言jls-4.9): ''? –

+0

可能な重複[Javaでジェネリッククラスをシリアル化する方法?](http://stackoverflow.com/questions/16852247/how-to-serialize-a-generic-class-in-java) – acm

答えて

3
  1. このタイプを一時的にマークすると問題になることはありますか?

インスタンスをデシリアライズした後、あなたはフィールドに値が必要な場合に依存します。その場合は、transientにマークを付けることができますが、遠端にあるtypeの値を再構築するために必要な情報を転送するには、別の方法が必要です。

  1. どのようにタイプをシリアライズ可能にすることができますか?

intersection typeようなタイプの変数を宣言します。

<T extends IAType & Serializable> 

編集:この提案は、シリアライズタイプとしてSonarQubeによって認識されないことが表示されます。

質問では、インターフェイスの実装が列挙型であると言います。

<T extends Enum<T> & IAType> 

注すべての列挙型が暗黙的に直列化可能なので、Serializableが明示的に交差タイプである必要はありません:それは、結合を表現する別の方法があることを示唆しています。

この方法では効果がありますが、最初の方法では効果がありません。両方のタイプの参照can be assigned to a variable of type Serializable。 (おそらくそれはSonarQubeのバグですか?)

+0

はい、私はフィールドを必要としますデシリアライズ後。私は型に '&Serializable'を追加するオプションを試しましたが、sonarQubeエラーはそのままです。 –

+0

http://stackoverflow.com/questions/38432990/sonarqube-does-not-recognise-serializable-generic-types他の人が同じ問題について尋ねてきたようですが(回答はまだありません) –

+0

すべての 'IAType'実装がenumである場合、' &IAType> 'を宣言できますか?ソナーレベはそれをシリアライズ可能と認識していますか? –

関連する問題