草庐IT

visitor-pattern

全部标签

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

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

java - @DateTimeFormat(pattern ="yyyy-MM-dd") 使用 Spring Mvc Rest Service 给出 "error 400 request syntactically incorrect"

这个问题在这里已经有了答案:Therequestsentbytheclientwassyntacticallyincorrect.-SpringMVC+JDBCTemplate(6个答案)关闭7年前。我无法让它工作:@RequestMapping(value="/people",method=RequestMethod.GET,produces="application/json")public@ResponseBodyListsearchPerson(@RequestParam(value="birthDay",required=false)@DateTimeFormat(patte

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 - Pattern.asPredicate 中的错误?

给定以下字符串列表:ListprogLangs=Arrays.asList("c#","java","python","scala");和一个应该匹配4个字母的小写字符串的正则表达式模式。Patternp=Pattern.compile("[a-z]{4}");现在我想找到适合模式p的progLangs元素。老办法:for(Stringlang:progLangs){if(p.matcher(lang).matches()){System.out.println(lang);}}我得到了预期的结果:java但是当我尝试使用Java8流实现相同的目的并使用Pattern.asPredic

Java - 解析字符串 - String.split() 与 Pattern 和 Matcher

给定一个包含表示专有名词和类别/描述对的逗号分隔列表的字符串,使用String.split()与Pattern&Matcher方法查找特定专有名词并提取相关类别的优缺点是什么/描述对?haystack字符串格式不会改变。它将始终包含以下形式的逗号分隔数据PROPER_NOUN|类别/描述两种方法的共同变量:Stringhaystack="EARTH|PLANET/COMFORTABLE,MARS|PLANET/HARDTOBREATHE,PLUTO|DWARF_PLANET/FARAWAY";Stringneedle="PLUTO";Stringresult=null;使用String

java 比较两个 Pattern 对象

有没有一种简单的方法来比较两个Pattern对象?我有一个Pattern,它使用正则表达式"//"编译以检查代码中的注释。由于有几种正则表达式来描述评论,我想找到一种方法来区分它们。如何实现?Pattern类没有实现equals方法。 最佳答案 您可以通过比较调用pattern()或toString的结果来比较Pattern对象,但这并不能满足您的要求(如果我正确理解你的问题)。具体来说,这会比较传递给Pattern.compile(...)工厂方法的字符串。但是,这没有考虑单独传递给模式字符串的标志。没有简单的方法可以测试两个不同

java 正则表达式 : find pattern of 1 or more numbers followed by a single

我遇到了Java正则表达式问题。如何找到1个或多个数字后跟单个.在一个字符串中? 最佳答案 "^[\\d]+[\\.]$"^=startofstring[\\d]=anydigit+=1ormoreocurrences\\.=escapeddotchar$=endofstring 关于java正则表达式:findpatternof1ormorenumbersfollowedbyasingle,我们在StackOverflow上找到一个类似的问题: https:

java - Splitter 在简单的 Pattern 上爆炸

我刚开始用Guava代替GoogleCollection。Splitter类看起来很酷。但是当我使用它时,就像这样:privatestaticfinalPatternp=Pattern.compile("+");privatestaticfinalSplitterusSplitter=Splitter.on(p).trimResults();我得到一个堆栈转储:java.lang.NoSuchMethodError:com.google.common.base.Platform.precomputeCharMatcher(Lcom/google/common/base/CharMatc