私は次のクラスを持っています:
public abstract class AbstractService<PersistenceClass extends IPersistence,
RequestClass, ResponseClass> {
public String processRequest(final String aRequestAsText)
{
[...]
final RequestClass request = mapper.readValue(aRequestAsText,
RequestClass);
[...]
}
}
通常、mapper.readValueの呼び出しは次のように実装されます 。
mapper.readValue(aRequestAsText, Request.class)
クラスRequestClassがジェネリックの場合、どのようにコーディングできますか?
更新 1 (06.09.2013):このコードは動作するようです:
public class GenericTypeBindigsFinder implements IGenericTypeBindigsFinder {
@SuppressWarnings("rawtypes")
@Override
public List<Class> getGenericTypes(final Class aClass) {
final List<Class> result = new LinkedList<Class>();
final ParameterizedType gen = (ParameterizedType) aClass.getGenericSuperclass();
final Type [] types = gen.getActualTypeArguments();
for (int i = 0; i < types.length; i++) {
if (types[i] instanceof Class)
{
final Class clazz = (Class)types[i];
result.add(clazz);
}
}
return result;
}
}
対応する単体テストはこちらにあります。