草庐IT

Java 枚举 - 枚举上的 Switch 语句与访问者模式 - 性能优势?

我已经搜索了好几天来找到这个基于性能的问题的答案。到目前为止,在浏览Internet之后,我了解到有几种方法可以在Java中使用枚举,详细记录在here中。.好吧,作为初学者肯定会喜欢在switch-case语句中使用枚举,这样可以使代码更加清晰和更好地理解。但另一方面,我们也有一个Visitor模式风格的枚举实现,这确保了类型安全和可扩展性,已讨论here.话虽如此,回到这个问题背后的最初想法,到目前为止,我了解到如果使用枚举正确设计了一个switch-case结构,这确保了case值不稀疏,并且Enum声明是在与switch-case语句相同的编译单元中,java编译器通过实现诸如

java - 具有 Java 8 默认方法的访问者模式

Visitorpattern(doubledispatch)就其本身而言是一种非常有用的模式,但如果将任何新成员添加到继承层次结构中,它经常会被审查是否会破坏接口(interface),这是一个有效的观点。但在Java8中引入默认方法后,现在我们可以在接口(interface)中定义默认实现,客户端接口(interface)不会中断,客户端可以适本地优雅地采用更改后的接口(interface)。interfaceVisitor{publicvoidvisit(Type1type);publicvoidvisit(Type2type);//addedafterthefirstversio

java - 跳过类型已知的 "accept"是否是对访问者模式的有效优化?

将以下访问者视为一个简单的语言解释器。publicinterfaceVisitor{voidvisit(VarStatvs);voidvisit(Identi);voidvisit(IntLiterala);voidvisit(Sums);}为了完整起见,我添加了一些代码来提供必要的实现细节(您可以跳过并直接阅读问题)。publicinterfaceVisitable{voidaccept(Visitorv);}publicclassVarStatimplementsVisitable{Identi;Expe;publicVarStat(Identid,Expex){i=id;e=ex

java - 两个参数的访问者模式

我们有接口(interface)/父类(superclass):学生和教师。Student有两个实现/子类,ScienceStudent和PhysicalEducationStudentTeacher有ScienceTeacher和PhysicalEducationTeacher。我们要实现一个方法getMeetingPoint(Students,Teachert),它根据学生和教师的类型返回他们见面的地点。例如,如果是ScienceStudent和ScienceTeacher,他们会在Lab见面如果是PEStudent和PETeacher,他们会在Ground和如果是ScienceS

java - 在源代码不可用的情况下实现访问者模式

考虑Visitor_pattern的原因之一:Apracticalresultofthisseparationistheabilitytoaddnewoperationstoexistingobjectstructureswithoutmodifyingthosestructures.假设您没有第三方库的源代码,并且您在相关对象上添加了一个操作。由于您没有对象,因此无法修改您的元素(第三方类)以添加访客。在这种情况下,双重分派(dispatch)是不可能的。那么通常首选哪个选项?选项1:在第三方类之上再扩展一个继承层次结构并实现如图所示的双重分派(dispatch)模式?对于扩展A类的

java - Spring 将浏览器访问者与对端点的 API 调用区分开来

在我的Springboot应用程序中,我在/api/**有一堆端点。以下是我的App配置:@ConfigurationpublicclassAppConfigextendsWebMvcConfigurerAdapter{privateclassPushStateResourceResolverimplementsResourceResolver{privateResourceindex=newClassPathResource("/public/index.html");privateListhandledExtensions=Arrays.asList("html","js","js

java - 访问者模式和策略模式有什么区别?

这两种模式我都学过,但不明白这两种模式之间的区别。我不知道场景,何时何地使用这些模式。任何人都可以解释差异和用例吗? 最佳答案 主要区别在于策略模式封装了一组相关的行为,而访问者模式封装了多个这样的组。当你需要封装一个行为时,你应该使用策略模式-如果你有一系列算法并且你需要在运行时从中选择,你应该使用策略模式。这很常见:每次你都会发生programtoaninterface.您应该使用访问者模式来实现双重分派(dispatch)-如果您有一组算法需要虚拟化不止一个对象。这种情况不太常见,部分原因是实现起来要困难得多。

Java:使用 RuntimeException 逃离访问者

我很想在Java程序中使用未经检查的异常作为短路控制流构造。我希望这里有人可以建议我更好、更简洁的方法来处理这个问题。我的想法是,我想缩短访问者对子树的递归探索,而不必在每个方法调用中检查“停止”标志。具体来说,我正在使用抽象语法树上的访问者构建一个控制流图。AST中的return语句应该停止探索子树并将访问者发送回最近的封闭if/then或循环block。Visitor父类(superclass)(来自XTClibrary)定义Objectdispatch(Noden)通过表单的反射方法回调ObjectvisitNodeSubtype(Noden)dispatch没有声明抛出任何异常

Java 访问者模式而不是 instanceof 开关

在此question据说我可以使用访问者模式而不是一堆instanceof。Jmg说“如果你不能随意更改A、B和C,你可以应用访问者模式来实现相同的目的。”据我所知,我仍然需要让A、B和C支持访问者(例如,有一个accept()方法)。我的问题是我绝对不可能更改A、B和C。我只是从外部库中获取Car对象并且必须调用特定于卡车、赛车的wash()方法和公共(public)汽车。我想我仍然需要一个带有instanceof的if-else-if结构。我说得对吗? 最佳答案 是的,现在要实现访问者模式,您需要访问A、B和C的源代码,除非所有

java - ANTLR 4 和 AST 访问者

我正在尝试将AST与ANTLR4一起使用,并使用以下文件:生成器.javaimportorg.antlr.v4.runtime.ANTLRInputStream;importorg.antlr.v4.runtime.CharStream;importorg.antlr.v4.runtime.CommonTokenStream;importorg.antlr.v4.runtime.TokenStream;publicclassBuilder{publicstaticvoidmain(String[]args){CharStreaminput=newANTLRInputStream("ON