我需要从一个方法返回一个结果,其中返回的对象本身应该与泛型参数具有相同的类型。这似乎比我想象的要困难。
这是一个简化的示例:
import android.content.Context;
public class PreferencesManager<T>
{
private EncryptingPreferencesManager<T> encryptingPreferencesManager;
public PreferencesManager(Context context)
{
encryptingPreferencesManager = new EncryptingPreferencesManager<>(context);
}
public T getPreferencesData(String identifier)
{
T data = encryptingPreferencesManager.getData(identifier);
return data;
}
}
...和实例化的类:
public class EncryptingPreferencesManager<T>
{
private Context context;
public EncryptingPreferencesManager(Context context)
{
this.context = context;
}
@SuppressWarnings("unchecked")
public T getData(String identifier) throws GeneralSecurityException, IOException
{
//do some stuff and get the content, which is a JSON
final T result = (T)JsonMapper.fromJsonToJavaObject(decryptedJson, ??????.class);
return result;
}
}
这是 JsonMapper 方法:
public static Object fromJsonToJavaObject(String jsonObject, Class<?> clazz) throws JsonParseException, JsonMappingException, IOException
{
return objectMapper.readValue(jsonObject, clazz);
}
不应更改 Json 映射器方法。它基本上有效。什么不能正常工作是中间的类与部分??????.class。
如果我在这里传递一个像CorrectResultObject.class这样的类定义,getData(...) 将返回一个 CorrectResultObject 的实例,所以这是有效的。但这必须是通用的。由于我无法通过T.class 之类的东西,我想通过Object.class,但最终结果(在转换后,如上所示)突然变成了 LinkedHashMap?!我不明白T的类型信息是如何丢失的,因为类本身是用 T 实例化的,并且类型擦除只发生在转换时的方法中,而不发生在实例化的类中?!
我必须如何编写类来实现getData(...)返回正确泛型类型的实例?
收到一只叮咚
守着星空守着你
相关分类