Javaparser:获取方法返回类型的泛型类,如List<;MyClass>;
我正在使用Java解析器库处理一个Java源文件 我在分析的源代码中遇到了这种情况:Javaparser:获取方法返回类型的泛型类,如List<;MyClass>;,java,javaparser,Java,Javaparser,我正在使用Java解析器库处理一个Java源文件 我在分析的源代码中遇到了这种情况: List<Allergen> getList() { return EnumSet.allOf(Allergen.class).stream() .filter(this::isAllergicTo) .collect(Collectors.toList()); } public class Placehol
List<Allergen> getList() {
return EnumSet.allOf(Allergen.class).stream()
.filter(this::isAllergicTo)
.collect(Collectors.toList());
}
public class PlaceholderNormalizer extends VoidVisitorAdapter<String> {
...
...
@Override
public void visit(MethodDeclaration n, String arg) {
logger.debug("MethodDeclaration: {}", n.getName().asString());
logger.debug(" --- " + n.getTypeAsString()); // prints: List<Allergen>
// DO SOME STUFF
super.visit(n, arg);
}
...
...
}
List getList(){
返回EnumSet.allOf(allogen.class).stream()
.filter(此::IsAllergito)
.collect(Collectors.toList());
}
我需要访问列表返回类型的泛型类(本例中为过敏原)
我正在分析器中使用VoidVisitorAdapter类的扩展
这里是代码的摘录:
List<Allergen> getList() {
return EnumSet.allOf(Allergen.class).stream()
.filter(this::isAllergicTo)
.collect(Collectors.toList());
}
public class PlaceholderNormalizer extends VoidVisitorAdapter<String> {
...
...
@Override
public void visit(MethodDeclaration n, String arg) {
logger.debug("MethodDeclaration: {}", n.getName().asString());
logger.debug(" --- " + n.getTypeAsString()); // prints: List<Allergen>
// DO SOME STUFF
super.visit(n, arg);
}
...
...
}
公共类占位符规范化器扩展了VoidVisitorAdapter{
...
...
@凌驾
公共无效访问(方法声明n,字符串arg){
debug(“MethodDeclaration:{}”,n.getName().asString());
logger.debug(“--”+n.getTypeAsString());//打印:列表
//做点什么
超级访问(n,arg);
}
...
...
}
我可以使用n.getType()
但是,我不知道如何检索过敏原类
请给我一些帮助如果使用此方法,
n.getType
将返回类或接口类型的实例
。要获取泛型参数,可以将其作为此类型并使用方法获取:
@覆盖
公共无效访问(方法声明n,字符串arg){
Type Type=n.getType();
if(类型instanceof classor接口类型){
ClassOrInterfaceType ClassOrInterfaceType=type.asClassOrInterfaceType();
可选的typeArguments=classOrInterfaceType.getTypeArguments();
//参数列表的长度可能不同
类型参数.ifPresent(类型->系统.out.println(类型.get(0));
}
//做点什么
超级访问(n,arg);
}
这将打印
过敏原
如果使用此方法,则n.getType
将返回类或接口类型
的实例。要获取泛型参数,可以将其作为此类型并使用方法获取:
@覆盖
公共无效访问(方法声明n,字符串arg){
Type Type=n.getType();
if(类型instanceof classor接口类型){
ClassOrInterfaceType ClassOrInterfaceType=type.asClassOrInterfaceType();
可选的typeArguments=classOrInterfaceType.getTypeArguments();
//参数列表的长度可能不同
类型参数.ifPresent(类型->系统.out.println(类型.get(0));
}
//做点什么
超级访问(n,arg);
}
这将打印
过敏原
谢谢,这个答案解决了我的问题谢谢,这个答案解决了我的问题