有些事情,我处于杰克逊java库正在创建
的JavaType的情况下? super java.util.Map<java.lang.String, java.lang.String>
为
[simple type, class java.lang.Object]
这在我的代码的其他地方引起了一些问题。我需要将其解决为:
[map type; class java.util.Map, [simple type, class java.lang.String] -> [simple type, class java.lang.String]]
对mapper.constructType
的调用可以与java.util.Map<java.lang.String, java.lang.String>
一起正常使用。所以我的问题如下:将? super someType
转换为简单的someType
的一般方法是什么。
一些其他上下文。
代码使用反射并将java和kotlin文件都传递到此java类。该代码查看某些函数中的参数,以查看其应将某些配置值作为什么传递。在这种情况下,我需要通过地图。我在下面写一些玩具代码。
handler.java:
void storeVales(Method method) {
//for f1: this returns java.util.Map<java.lang.String, java.lang.String>
// for f2 we get: ? super java.util.Map<java.lang.String, java.lang.String>
parameterType = getParamType(method);
// For f1 this sets as: [map type; class java.util.Map, [simple type, class // java.lang.String] -> [simple type, class java.lang.String]]
// and
// for f2: [simple type, class java.lang.Object]
JavaType javaType = mapper.constructType(parameterType);
myMap.put(method, javaType);
}
Type getParamType(Method method){
Type[] types = method.getGenericParameterTypes();
for(Type t: types) {
ParameterizedType paramed = (ParameterizedType) t;
return parameterized.getActualTypeArguments()[0]
}
让我知道是否需要更多。但是storeVales
在这里起作用。传递的函数签名如下:
来自kotlin文件:
// this does work in a java file and works properly.
fun f1(p: Consumer<Map<String, String>>)
// this does NOT work. From a kotlin file.
fun f2(p: (Map<String, String>) -> Unit)