2011-02-02 1 views
0

で動的バインディング...ここ は私のクラスの概要は次のとおりです。iはダイナミックparameticタイプ(リスト)をバインドする必要がありますが、私は右のそれを得るいけないジェネリック型

public abstract interface SettingsField<A> extends Window 

その後、私はいくつかのクラスを持っていますSettingsFieldは実装しています

public class StringSettingsField implements SettingsField<String> 
public class MapSettingsField<K, V> implements SettingsField<Map<K, V>> 

最初は本当シンプルですが、2番目は少しトリッキーです例えば...ので、私はSettingsFiledsを返し工場を作りたいです。動的バインディングを使用して、そこに配置するオブジェクトごとに適切なSettingsWindowを取得します。 私は次のgetFieldメソッドをオーバーロードします。 その非常に簡単文字列のため: (もなるだろうか?)exampeあるキーは常に文字列であることを

public SettingsField<Map<? extends String, ?>> getField(Map<? extends String, ?> x){ 
    return new MapSettingsField(); 
} 

...

public SettingsField<String> getField(String x){ 
    return new StringSettingsField(); 
} 

が、マップのために、私はいくつかの問題を持っているが、今コンパイラは私にそれを与える。

MapSettingsFieldは生の型です。ジェネリック型MapSettingsFieldへの参照は、パラメータ化する必要があります

ここで私はこれを行うことができますか?問題はちょうど使用されていますMapは有効ではありません、Javaのfジェネリックの問題のために(ListはAのサブタイプでもListは暗黙のサブタイプではありません)

ヒント?前もって感謝します!

答えて

1

IIUYCは、あなたがところで

return new MapSettingsField<? extends String, ?>(); 

必要があります。文字列が最終的なものとして、extends Stringはあまり意味がありません。

しかし、私は有界としてあなたは、例えば、あまりにも、Kを宣言することができ

public <K, V> SettingsField<Map<K, V>> getField(Map<K, V> x){ 
    return new MapSettingsField<K, V>(); 
} 

のようなもののために行くだろう

public <K extends Number, V extends List> ... 

などです。

+1

最初の例では、MapSettingsFieldタイプの引数の数が正しくないため、コンパイル時エラーが発生します。;引数> –

+0

私はあなたの第二の解決策は、私は静的なタイプが安全であるので最高だと思う!ありがとう! – reox

関連する問題