2

パラメータにジェネリックマップを期待するメソッドがあります:

public void someMethod(Map<String,?> mapParameter){
    ...
}

このメソッドを呼び出す私の実装では、「?」に複数の可能な値があります。一般的なパラメータ。たとえば、「?」の値が 整数になり、その他は文字列、ブール値になります。

私の値を受け入れ、「someMethod」メソッドに渡される完全に汎用的なHashMapを宣言する方法が存在しますか?

クラス「IntegerValueDTO」に値を抽出し、文字列値で値を受け取り、特定のタイプに変換しようとしました。作成されたこの「valueDTO」クラスはすべて、「defaultValue」から拡張するために配置しました。これで、私はこのマップを実装しました:

Map<String, ? extends DefaultValue> map = new HashMap<String, ? extends DefaultValue>();

しかし、メソッドsomeMethodは私のアプリケーションからのものではなく、フレームワークからのものであり、実装をチャンスにするためのコントロールがありません。そして、私のマップをそのように宣言すると、彼はのマップを生成し"Map<String, some instance of DefaultValue>"、フレームワークがクラ​​ッシュします。

どんな助けでも大歓迎です。

4

2 に答える 2

4
Map<String, ? extends Object> map = new HashMap<String, ? extends Object>();

そのメソッドがアプリケーションで使用する予定の値を返す場合は、リフレクションを使用して、どの値を返し、その特定のオブジェクトにキャストするかを確認できます。

于 2012-07-23T20:17:10.347 に答える
0

DefaultValueのようなWrapperクラスなしではそれを行うことはできません。

その理由は、Integer、Character、LongなどのラッパークラスがObjectを拡張しないためです。

于 2012-07-23T20:13:51.723 に答える