この簡単な例のように、テスト値をクラスに入れる必要があります。
import java.util.List;
import java.util.Map;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
public class TestVal {
private static Map<Class<?>, Object> dummyValues = Maps.newHashMap();
static {
dummyValues.put(String.class, "Banana");
dummyValues.put(Integer.class, 42);
}
@SuppressWarnings("unchecked")
static final <T> T ofType(Class<T> type) {
return (T) dummyValues.get(type);
}
public static void main(String[] args) {
List<? extends Object> list =
Lists.newArrayList(ofType(String.class), ofType(Integer.class));
for (Object object : list) {
System.out.printf("%s: %s%n", object, object.getClass().getName());
}
}
}
一度実行すると、次のようになります。
Banana: java.lang.String
42: java.lang.Integer
したがって、「基本」システムとしては問題ありません。
しかし、もっとタイプセーフが欲しいです。
私はGuavaを研究しようとしていましImmutableClassToInstanceMap
たが...少し難しいと思います.このメソッドシグネチャを見てください:
public static
<B, S extends B>
ImmutableClassToInstanceMap<B>
copyOf(
Map<? extends Class<? extends S>,
? extends S> map
)
残忍ですね。「任意の」タイプにどのように使用しますか? GoogleのWikiで例を見ませんでした..
上記のように「一所懸命」ではなく、「一段上」に進むことはできますか?同じことを行う別の明白な方法がありませんか?