0

我正在研究 Javapoet 作为某些协议模型对象自动生成的候选者。感谢 API!

问题:我可以生成复杂类型的字段,例如:

TypeName myType = HashMap<String, HashMap<String, List<String>>>; ?

例如,如果我想获得更简单的 TypeName: "HashMap< String, String>" - 我可以通过以下方式轻松实现:

ParameterizedTypeName.get(Map.class, String.class, String.class);

先感谢您!

4

3 回答 3

1

import java.util.ArrayList	;
import java.util.HashMap;
import java.util.List;
import java.util.Set;

public class EX1 {
	public static void main(String[] args) {

	HashMap<String,HashMap<String,List>>outerhashmap=new HashMap<>();
	HashMap<String,List>innerhashmap=new HashMap<>();
	List l=new ArrayList();
	l.add("shine");
	l.add("unicorn");
	l.add("twister");
	l.add("twister");
	List l1=new ArrayList();
	l1.add("passon");
	l1.add("splender");
	l1.add("karizma");
	
	innerhashmap.put("HONDA", l);
	innerhashmap.put("HERO", l1);
	
	outerhashmap.put("BIKE", innerhashmap);
	
	for(HashMap.Entry<String, HashMap<String,List>>entry:outerhashmap.entrySet()){
		String keys=entry.getKey();
		HashMap<String, List> values=entry.getValue();
		System.out.println(keys+"======="+values);
	}
		}
}

于 2017-03-11T13:29:47.000 回答
0

java.lang.IllegalArgumentException:'$T' 的索引 6 不在范围内(收到 5 个参数)

因此,你不能生成一些文件

于 2016-11-09T14:46:47.993 回答
0

我们可以使用TypeMirror,无论参数化类型多么复杂,它都会起作用。

  1. 创建一个包含所需类型作为返回类型的示例方法。

    Map<String, List<String>> foo() {}
    
  2. 然后,使用 java 反射镜像返回类型,如下所示:

    TypeName complexParameterizedType = ParameterizedTypeName.get(TestClass.class.getDeclaredMethod("foo").getGenericReturnType());
    MethodSpec meth = MethodSpec.methodBuilder("targetMethod").returns(complexParameterizedType).build();
    
于 2020-09-21T13:44:09.063 回答