2014-10-06 11 views
0

При осуществлении fromMap ниже я хотел бы получить тип во время выполнения общего типа T с использованием TypeTools, но я застрял с NullPointerException в TypeResolver.resolveRawArguments(MapperImpl.class, getClass());.Разрешающая общая информация типа с TypeTools

Как я могу это достичь?

Mapper.java:

import java.util.Map; 

public interface Mapper<T extends Object, S extends Map<String, Object>> { 
    public S toMap(T obj); 
    public T fromMap(S map); 
} 

MapperImpl.java

import com.fasterxml.jackson.databind.ObjectMapper; 
import java.util.Map; 
import net.jodah.typetools.TypeResolver; 

public class MapperImpl<T extends Object, S extends Map<String, Object>> 
    implements Mapper<T, S> {   

    public S toMap(T obj) { 
     ObjectMapper objectMapper = new ObjectMapper(); 
     Map<String, Object> map = objectMapper.convertValue(obj, Map.class); 
     return (S) map; 
    } 

    public T fromMap(S map) { 
     ObjectMapper objectMapper = new ObjectMapper(); 

     Class<?>[] ts = TypeResolver.resolveRawArguments(MapperImpl.class, getClass()); 
     Class<T> classT = (Class<T>) ts[0]; 

     T obj = objectMapper.convertValue(map, classT); 

     return obj; 
    } 

ответ

0

TypeTools или любое родовое разрешение типа в Java, всегда требуется, чтобы аргументы типа быть захвачены в типе определение. То, что вы пытаетесь сделать, будет работать нормально, пока MapperImpl подклассифицируется, так что значение T и S фиксируется в определении типа. Пример:

public class FooMapper extends MapperImpl<Foo, ArrayList<String, Object>> {}