gpt4 book ai didi

java - 如何使用 "javax.lang.model.element.ElementVisitor"?

转载 作者:搜寻专家 更新时间:2023-11-01 02:55:50 25 4
gpt4 key购买 nike

我尝试使用 java 注释处理器并尝试理解“javax.lang.model”中类的用法。对于我所阅读的内容,我认为 ElementVisitor 旨在作为使用模型的主要方式。但我不明白如何正确使用它。

我知道访客模式。到目前为止,我已经使用它来避免迭代元素的子元素(以及子元素的子元素......)并避免丑陋的“instanceof”测试。但这来客似乎有些不同。如果我在模型元素上调用“接受”,它不会访问子元素,而只会访问元素本身。

有人可以提供有关如何使用 API 的帮助吗?

我找到了以下链接:http://www.cs.bgu.ac.il/~gwiener/programming/visitors-galore/#more-113 .但是在另一个内部使用一个访问者......感觉不对!?

编辑:为了更容易理解问题,我从上面的链接复制了代码。以下代码似乎并不“正确”。我无法相信官方的 java API 是这样设计的。但是如何正确使用 ElementVisitor 呢?

tElem.accept(new SimpleElementVisitor6<Void, ...>() {
public Void visitType(TypeElement e, ...) {
for (Element tSubElem : e.getEnclosedElements()) {
tSubElem.accept(new SimpleElementVisitor6<AssocEndSpec, ...>() {
public AssocEndSpec visitExecutable(ExecutableElement ex, ...) {
TypeMirror tRetTypeMirror = ex.getReturnType();
tRetTypeMirror.accept(new SimpleTypeVisitor6<TypeElement, TypeElement>() {
public TypeElement visitDeclared(DeclaredType t, TypeElement enclose) {
for (TypeMirror tTypeArgMirror : t.getTypeArguments()) {
tTypeArgMirror.accept(new SimpleTypeVisitor6<TypeElement, ...>() {
public TypeElement visitDeclared(DeclaredType t, TypeElement self) {
TypeElement tArgTypeElem = (TypeElement) t.asElement();
if (!self.equals(tArgTypeElem)) {
// found the little bugger!
}
}
}, ...);
}
}
}, ...);
}
}, ...);
}
}, ...);

最佳答案

这段代码是胡说八道。

看看 javax.lang.model.util.ElementKindVisitor6javax.lang.model.util.ElementScanner6,它们可能会做什么。无论如何,您应该能够获取他们的资源并根据您的需要进行调整。

注意:话虽这么说,是的,我也想说 ElementVisitor 是一个相当奇怪的访问者实现。

关于java - 如何使用 "javax.lang.model.element.ElementVisitor"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1900846/

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