铸造?以通用方式将java.util.Map <java.lang.string,java.lang.string =“”>转换为java.util.Map <java.lang.string,java.lang.string =“”>

时间:2019-05-06 16:12:57

标签: java types jackson

有些事情,我处于杰克逊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)

0 个答案:

没有答案