如何在Java中确定泛型方法中的类型?

Mne*_*nth 1 java generics instanceof

我想要一个方法,从之前解析的JSON对象中提取数据作为正确的类型.JSONObject(rawdata)扩展了Map,所以它看起来像这样:

private <Type> Type getValue(String key, Type def)
{
    if (!rawdata.containsKey(key)) return def;
    if (!(rawdata.get(key) instanceof Type)) return def;
    return (Type) rawdata.get(key);
}
Run Code Online (Sandbox Code Playgroud)

instanceof明显产生编译时错误.该参数def是default-value,如果密钥不可用或类型错误,则返回该参数.但def也可以为null,所以def.getClass()不起作用.

我有什么想法可以检查Map-entry的内容是否正确?

Mic*_*rdt 7

由于类型擦除,处理默认值为null的情况的唯一方法是让方法需要额外的parmeter类型Class- 这通常更好,因为它允许默认值是所需类型的子类.