问题标签 [visitor-pattern]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ASTNode 的 accept() 方法是做什么的,它是如何使用 ASTVisitor 的?
ASTNode的accept
方法是做什么的(javadoc 没有太大帮助...),什么时候visit(Expression node)
调用该方法?这是我需要如何使用它的示例代码:
谢谢
java - 使用 ASM 访问阵列访问
我想知道是否可以使用 ASM API 跟踪对数组的访问。
我的目标是确定访问数组的哪个索引,以及何时访问(这部分很容易 - 使用System.NanoTime()
)。我只是找不到确定正在访问哪个索引的方法。
我一直在尝试使用以下那些没有任何成功 - visitFieldInsn
(对于类的静态和非静态变量),visitVarInsn
(对于静态和非静态局部变量),以及visitMultiANewArrayInsn
- 它并没有真正识别任何数组。
java - 使用 Java 从具有访问者模式的 AST 构建控制流图
我试图弄清楚如何实现我的 LEParserCfgVisitor 类,以便从已经用 JavaCC 生成的 Abstract-Syntax-Tree 构建控制流图。我知道已经存在一些工具,但我正在努力为我的编译器决赛做准备。
我知道我需要一个将图形保存在内存中的数据结构,并且我希望能够在每个节点中保留 IN、OUT、GEN、KILL 等属性,以便以后能够进行控制流分析。
我的主要问题是我还没有弄清楚如何将不同的块连接在一起,因为每个块之间的正确边缘取决于它们的性质:分支、循环等。换句话说,我还没有找到一个明确的可以帮助我建立访问者的算法。
这是我的空访客。您可以看到它适用于基本语言表达式,例如 if、while 和基本操作(+、-、x、^、...)
谁能帮我一把?
谢谢!
java - 如何克服访问者实现的类型擦除问题
在 C# 和 C++ 的一些项目之后,我开始使用 Java。
我想设计这样的访问者界面:
当然,由于类型擦除,这不起作用。(我想要这样的东西的原因是我将为可以访问的不同操作组提供不同的访问者界面。)
我想到的唯一解决方案是声明接口
接着
这会起作用,但我不喜欢所有 ActionXVisitor-Interfaces 的声明,这是愚蠢的重复和大量文件......
你有什么想法可以更好地做到这一点吗?
非常感谢!
validation - Struts 2:使用 ValidationInterceptor + Visitor 验证子集合
我有一个模型对象,它具有标题-详细信息关系中的一组子项,标题在一个操作类(和表单)中处理,详细信息在单独的操作类(和表单)中编辑。当我保存标题对象时,我希望能够对标题中的整个对象图进行全面验证;我已经在标题中声明了一个访问者-validation.xml
:(我们在这个项目中使用 XML 验证)
详细信息类也具有适当的验证。
我们碰巧也从另一个图创建/预填充这个特定的对象图;但是,预填充会留下一些例如必填字段为空。
发生的情况是只有标题得到验证,因为这是在 save 方法运行时提交的表单。是否也可以强制验证细节(通过我声明的访问者),而实际上细节在标题表单中没有任何表单元素?
我想让它保持干燥,并且不必在标头操作的 validate() 方法中进行显式验证。
java - Invoking a method overloaded where all arguments implement the same interface
My starting point is the following:
- I have a method, transform, which I overloaded to behave differently depending on the type of arguments that are passed in (see transform(A a1, A a2) and transform(A a1, B b) in my example below)
- All these arguments implement the same interface, X
I would like to apply that transform method on various objects all implementing the X interface.
What I came up with was to implement transform(X x1, X x2), which checks for the instance of each object before applying the relevant variant of my transform.
Though it works, the code seems ugly and I am also concerned of the performance overhead for evaluating these various instanceof and casting. Is that transform the best I can do in Java or is there a more elegant and/or efficient way of achieving the same behavior?
Below is a trivial, working example printing out BA. I am looking for examples on how to improve that code. In my real code, I have naturally more implementations of 'transform' and none are trivial like below.
design-patterns - 访问者模式和编译器代码生成,如何获取子属性?
我想修改我的编译器的代码生成器以使用访问者模式,因为当前的方法必须使用多个条件语句来检查孩子的真实类型,然后再生成相应的代码。但是,在访问孩子后,我无法获取孩子的属性。例如,在二进制表达式中,我使用这个:
在访问者模式中,访问方法通常是无效的,所以我无法从 LHS 和 RHS 获取表达式代码。保留共享全局变量不是一种选择,因为表达式代码生成是递归的,因此可能会删除变量中保留的先前值。
我将只显示二进制表达式,因为这是最复杂的部分(目前):
希望你能理解:)
c# - 访客模式项目跟踪器
在具有以下接口的访问者模式的实现中(如果您认为接口本身错误,请随时告诉我),谁应该负责跟踪所有访问项目的列表?访问者还是可访问者?具体来说,跟踪器还必须负责确保同一项目不会被访问两次(如果我正在访问的图表包含循环引用)。
java - 动态类派生 - 访问者模式
我想以这种方式创建访问者模式
等等
然后我想创建一个工厂
我可以通过以下方式调用它
使用这种方法,我不必为所有实现 Visitor 接口 accept() 方法的 bean 创建 comman 抽象类。
此解决方案也可用于我们希望根据每个类层次结构的服务工厂具有特定方法的共同行为的情况。
有什么方法可以用标准 jdk 做到这一点,或者我可能需要使用像 cglib 这样的外部工具,或者我所说的可能是垃圾,我们可以通过其他方式实现这个目标。
高级发送
jaxb - 如何让 JAXB 生成的类参与访问者模式?
嘿伙计们,希望这里很容易。
我正在从模式中使用 JAXB 生成类,并且我希望能够使用访问者模式来处理它们。
为此,我认为我需要每个 JAXB 生成的类来实现我定义的接口,并向它们添加一个非常简单的方法,所以一个简单的例子是:
默认类:
期望班级:
这是否可能,如果是,有哪些选择?(更改模式、运行时字节码操作、以某种方式操作 JAXBContext ......)
理想情况下,不依赖供应商特定的扩展。
谢谢!