0

次のようなことをしたいと思います。

public class Test {
    public static void main(String[] args) {
        Map<String, Set<String>> map = new HashMap<String, Set<String>>();
        map.put("key1", new HashSet<String>());

        Set<String> theSet = getObjectAs(map, ***Set<String>.class***);
    }

    private static <T> T getObjectAs(Object object, Class<T> cls){
        return cls.cast(object);
    }
}

しかし、これは機能しません。パラメータ化されているため、.class (太字で表示) を使用してその Set からクラス オブジェクトを取得できません。

タイプが異なる場合がありますが(常に文字列のセットであるとは限りません)、私が知っていてパラメーターとして与えることができるセットを返すようにそのメソッドを作成したいと思います。

このようなことを行う別の方法はありますか?

4

1 に答える 1

1

これを行うことができる唯一の方法は、安全でないキャストを行う必要があることを受け入れることです。のようなものはありません。Set<String>.classすべての点で、とまったく同じになるからSet.classです。

他にできることは、GuavaのTypeTokenように、ライブラリの「ジェネリッククラス」タイプの1つを使用することだけですが、これでは安全でないキャストの必要性を回避することはできません。指定することしかできません。ジェネリックでそれ。グアバのTypeToInstanceMap作品も同様です。

于 2013-01-24T20:43:14.750 に答える