0

私は次のクラスを持っています:

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;
    }

}

対応する単体テストはこちらにあります

4

3 に答える 3

2

objectまたはをメソッドに渡すようにしてくださいinterface。そうすれば、getClass()メソッドまたは多分でそのクラスを取得できますinstanceof

于 2013-09-05T12:23:02.687 に答える
0

これについては、TypeToolsを確認してください。

Class<?>[] typeParams = TypeResolver.resolveRawArguments(AbstractService.class, getClass());
Class<PersistenceClass> persistenceClass = (Class<PersistenceClass>)typeParams[0];
Class<RequestClass> requestClass = (Class<RequestClass>)typeParams[1];
Class<ResponseClass> responseClass = (Class<ResponseClass>)typeParams[2];
于 2013-10-26T02:18:24.197 に答える