オブジェクトを文字列に変換するためのインターフェイスがあります。
public interface Converter<T> {
String asString(T object);
}
そして、利用可能なすべてのコンバーターを格納するためのマップ:
Map<Class<?>, Converter<?>> converterMap;
これで、次のように変換する異種データのリストができました。
List<?> data = fetchData();
List<String> stringData = new ArrayList<>(data.size());
for (Object datum : data) {
stringData.add(convertrMap.get(datum.getClass()).asString(datum));
}
しかし、このコードはコンパイルされません:
error: method asString in interface Converter<T> cannot be applied to given types;
stringData.add(converterMap.get(datum.getClass()).asString(datum));
required: CAP#1
found: Object
reason: actual argument Object cannot be converted to CAP#1 by method invocation conversion
where T is a type-variable:
T extends Object declared in interface Converter
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ?
コードをどのように変更すればよいですか?