Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javaparser:获取方法返回类型的泛型类,如List<;MyClass>;_Java_Javaparser - Fatal编程技术网

Javaparser:获取方法返回类型的泛型类,如List<;MyClass>;

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

我正在使用Java解析器库处理一个Java源文件

我在分析的源代码中遇到了这种情况:

 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);
}

这将打印
过敏原

谢谢,这个答案解决了我的问题谢谢,这个答案解决了我的问题