gpt4 book ai didi

java - 是否可以静态区分完全限定名称和嵌套类类型?

转载 作者:行者123 更新时间:2023-12-05 04:37:56 25 4
gpt4 key购买 nike

我正在使用 JavaParser(开源)来解析以下代码。

package testfiles.simple.tricky.before;

import testfiles.simple.before.InnerClassSample;

public class InnerClassReference {
public void ref(InnerClassSample.MyInnerClass myInnerClass, java.util.List<Long> list) {
int i = 0;
}
}

在名为ref的methodDeclaration节点下,我得到的参数节点层次结构如下:

// myInnerClass
Parameter
ClassOrInterfaceType:
ClassOrInterfaceType:
SimpleName: InnerClassSample
SimpleName: MyInnerClass
SimpleName: myInnerClass
// list
Parameter
ClassOrInterfaceType:
ClassOrInterfaceType:
ClassOrInterfaceType:
SimpleName: java
SimpleName: util
SimpleName: List
SimpleName: list

我需要找到每个参数的完全限定名称。所以对于 myInnerClass我会得到 testfiles.simple.before.InnerClassSample$MyInnerClasslist它将是 java.util.List .

我知道通常人们会写 List<Long>并放置一个 import 语句而不是写 java.util.List<Long> ,但是,我需要处理在参数中写入 FQN 的情况。

现在我的问题是,有没有一种方法可以静态区分这样的解析树是嵌套类的类型,还是仅仅是类的完全限定名称?

我考虑过通过检查 SimpleName 是否以小写字母开头(意味着它是包名)来区分,但是,这只是一个约定,所以我们不能安全地假设开发人员总是以包名开头小写字母,或以大写字母开头的类名,因此我认为这不是一个好方法。

如果您对此事有任何想法或见解,我们将不胜感激。

最佳答案

遗憾的是,仅通过限定名称或仅分析单个源文件无法区分顶级类的名称和嵌套类的名称。至少不是在所有情况下。

要做出这种区分,您必须执行解析 步骤,以找出名称引用的内容。这必然涉及多个源文件。

解析步骤可能涉及查看 AST 中的信息或引用元素的类文件。


注意:即使解析步骤涉及多个源文件,该信息仍然是静态信息。

关于java - 是否可以静态区分完全限定名称和嵌套类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70648899/

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