gpt4 book ai didi

java - 从 TypeMirror 获取数组的类类型

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:47:46 24 4
gpt4 key购买 nike

我正在做 Java APT 并想解析一个方法(ExecutableElement)。现在我需要方法的返回类型。如果它是一个数组,我不知道如何获取类型。

示例:String[] foobar()

我想获取类型String

从 ExecutableElement 实例中,我可以获得作为 TypeMirror 实例的返回类型(使用 getReturnType())。但如果它是一个数组,我就无法获得“真实类型”(在我的示例中:String)。

我试过:

System.out.println("TEST: " + pReturnType.toString());
System.out.println("TEST2: " + pReturnType.getClass().getName());
System.out.println("TEST3: " + pReturnType.getClass().getEnclosingClass());
System.out.println("TEST4: " + pReturnType.getClass().getComponentType());
System.out.println("TEST5: " + pReturnType.getKind());

这给了我:

TEST: java.lang.String[]
TEST2: com.sun.tools.javac.code.Type$ArrayType
TEST3: class com.sun.tools.javac.code.Type
TEST4: null
TEST5: ARRAY

我想要一个 java.lang.Class 的实例,代表 java.lang.String(在我的示例中)。

最佳答案

我知道这是一个老问题,但这里的所有答案都在考虑反射,而不是 TypeMirror,它是注释处理 api 的一部分,而不是反射。

要从 typeMirror 获取组件类型,您必须将其转换为 ArrayType 并调用方法 ArrayType::getComponentType() 即,

TypeMirror pReturnType = ...
if (pReturnType.getKind() == TypeKind.ARRAY) {
return ((ArrayType)pReturnType).getComponentType();
} else {
//this is not an array type..
}

关于java - 从 TypeMirror 获取数组的类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19785870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com