2011-07-20 7 views
0

がコンパイルジェネリッククラスのジェネリック型パラメータから導出する

public class SerializableObject<T> extends T implements Serializable 
{ 
} 

をだから、私はそのジェネリック型パラメータから導出するジェネリッククラスをしたいです。
なぜですか?
私はMap<K, V>を持っていて、単にそれをシリアル化したいとします。
また、どのキーを持っているかわからない。

どうすればよいですか?

+0

他の場所(マップを含むクラスなど)で 'K 'と' V'を定義できれば、 'で十分でしょうか? – Thomas

+1

これは意味をなさない。シリアライズされていないクラスのオブジェクトをシリアリングすることはできません。クラスの開発者はこれを予見しなければなりません(フィールドを一時的にマークする、他のフィールドがシリアライズ可能であることを確認するなど)。 –

+0

@Joeri +1 "それにインターフェイスを叩いて" LOL!あなたは確信している可能性があります。 – Poni

答えて

3

したがって、ジェネリッククラスをそのジェネリック型パラメータから派生させたいと思います。

あなたはただそれを行うことはできません、私は恐れています。これにはさまざまな技術的な理由がありますが、その中でもタイプ消去があります。

問題の別の解決策を探す必要があります。この考えは致命的なものです。

+0

奇妙なサイドノートとして:これは.NET/C#で可能ですか?それは消去を使用しませんが、私はそれがまだそこで動作しないと思います。 –

+0

デッドエンドuh ... blah ....そしてありがとうジョン。 – Poni

+0

@Joachim:いいえ、.NETはそれを許可しません。 –

0

いいえ、あなたの目標は、Javaがサポートしていない動的型の近くです。

+0

おそらく。最初の例は動作し、2番目の例は動作しません。彼らはそれを許すべきです。また、実行時にコンパイルされるので、実際には動的ではありません。 – Poni

+0

誰がであるかわからない場合は、どのように延長できますか?コンパイラはナットします。 は、抽象メソッドを持つことも、最終クラスにすることもできます。 – everton

関連する問題