我今天遇到了Java没有调用我预期的方法的情况——这是最小的测试用例:(很抱歉这看起来是人为的——“现实世界”的场景要复杂得多,并且从“你到底为什么要那样做?”的角度来看更有意义。)我特别感兴趣的是为什么会这样,我不关心重新设计的建议。我感觉这是在JavaPuzzlers中,但我手边没有副本。在下面的Test.getValue()中查看具体问题:publicclassOl2{publicstaticvoidmain(String[]args){Testt=newTest(){protectedIntegervalue(){return5;}};System.out.println(t.
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion我有一项服务必须按某些属性返回人员。我看到了两种命名这些方法的策略:第一个:getPersonById(intid)getPersonByBirthDate(Datedate)getPersonByBirthDateAndSex(Datedate,Sexsex)getPersonByNameAndSex(Stringname,Sexsex)getPersonByBirthDateAndNa
在KenArnold、JamesGosling、DavidHolmes的“THEJava™ProgrammingLanguage,FourthEdition”中提到:段落:(4.3.2)“类似地,如果一个接口(interface)继承了多个具有相同签名的方法,或者如果一个类实现了包含具有相同签名的方法的不同接口(interface),则只有一个这样的方法。这个方法的实现最终由实现接口(interface)的类,那里没有歧义。如果方法具有相同的签名但返回类型不同,则其中一个返回类型必须是所有其他返回类型的子类型,否则会发生编译时错误。实现必须定义一个返回该公共(public)子类型的方法
只是想知道您对这两种不同的方法有何看法:重载方法与长/冗长的方法名称。更新:我正在寻找通用模式/最佳实践。以下仅为示例。给定一个具有父/子关系的组织结构>OrgUnit>-OrgUnit>--OrgUnit>--OrgUnit两种方法在很大程度上使用相同的代码来获取xml元素的子元素。//1)only1leveldownchildrengetSubOrgUnits()//2)alllevelsdowngetSubOrgUnits(booleanincludeChildren)//3)alternativenamingof1)getDirectSubOrgUnits()//4)alter
publicstaticvoidmain(String[]args){System.out.println(fun(2,3,4));}staticintfun(inta,intb,intc){return1;}staticintfun(int...a){return0;}输出:1问题:在上面的例子中,为什么fun函数选择了第一个函数而不是第二个函数。选择的依据是什么,因为无法确定用户实际想要调用哪个fun? 最佳答案 基本上有一个特定调用的偏好。撇开其他不谈,这意味着可以针对少量参数进行优化,避免在执行时毫无意义地创建数组。JLS并
程序一classB{publicvoidm1(intx){System.out.println("Superclass");}}classAextendsB{publicvoidm1(int...x){System.out.println("Subclass");}}classtest1{publicstaticvoidmain(Stringargs[]){Bb1=newB();b1.m1(10);Aa=newA();a.m1(10);Bb2=newA();b2.m1(10);}}输出:super类父类(superclass)(无法理解为什么父类(superclass)?!)父类(su
我知道如何重载方法,以及如何覆盖方法。但是有可能同时重载和覆盖一个方法吗?如果是,请举例说明。 最佳答案 重载和覆盖是互补的东西,重载是方法名相同但参数不同,覆盖是子类中方法名相同,参数相同。所以不可能同时发生重载和覆盖,因为重载意味着不同的参数。例子:classA{publicvoiddoSth(){///}}classBextendsA{publicvoiddoSth(){/*methodoverriden*/}publicvoiddoSth(Stringb){/*methodoverloaded*/}}干杯!
在重载的概念上,我有一个疑惑,那就是.当我用int值重载方法时,方法调用的是float参数方法而不是双参数方法。voidmethod1(floatf){System.out.println('float');}voidmethod1(doublef){System.out.println('double');}methodcall:method1(10);output:float如本link中的java教程所述如果浮点文字以字母F或f结尾,则它是float类型;否则它的类型是double并且它可以选择以字母D或d结尾。对于上述情况,方法调用应该调用双参数方法。但是调用的是float参数
我想知道是否可以使用Java7的新invokedynamic字节码指令来实现multipledispatch对于Java语言。java.lang.invoke下的新API是否有助于执行此类操作?我正在考虑的场景如下所示。(这看起来像是访问者设计模式的一个应用案例,但可能有一些原因表明这不是一个可行的选择。)classA{}classA1extendsA{}classA2extendsA{}classSomeHandler{privatevoiddoHandle(A1a1){...}privatevoiddoHandle(A2a2){...}privatevoiddoHandle(Aa)
给出以下声明interfaceBase{}interfaceSpecialextendsBase{}voidfoo(Baseb){}voidfoo(Specials){}为什么我会得到以下代码的编译错误:Specials=null;foo(s);//error:referencetofooisambiguous顺便说一句,可以通过将第二种方法的声明更改为来解决此问题voidfoo(Specials){} 最佳答案 首先,一个非常有趣的问题。没有泛型考虑以下代码:interfaceNoGenericsBase{}interfaceNo