当前位置: 首页 > 面试题库 >

Java 8向类添加扩展/默认方法

韩佐
2023-03-14
问题内容

我正在寻找与C#扩展方法功能等效的Java。现在,我一直在阅读有关Java 8的默认方法的信息,但据我所知,我只能将它们添加到接口中。

…是否有任何语言功能可让我为未实现接口的最终类​​编写扩展方法?(我宁愿不必包装它…)


问题答案:

对于以扩展类型作为第一个参数的静态方法,C#扩展方法只是语法糖。Java默认方法完全不同。要模仿C#扩展方法,只需编写常用的静态方法。但是,您将不会食用合成糖。Java没有此功能。

Java默认方法是真正的虚拟方法。例如,它们可以被覆盖。考虑XI声明默认foo()方法的接口继承的类。如果X或其任何超类未声明自己的foo()方法,X则将获取的foo()实现I。现在,子类YX可以覆盖X.foo()像通常的方法。因此,默认方法不仅是语法糖。它们是方法覆盖和继承机制的真正扩展,其他语言功能无法模仿。

默认方法甚至需要特殊的VM支持,因此它们甚至不只是编译器功能:在类加载期间,必须检查类的层次结构以确定它将继承哪些默认方法。因此,此决定是在运行时而不是在编译时做出的。很棒的事情是,当继承的接口获得新的默认方法时,您不必重新编译类:VM将在类加载时将新方法分配给它。



 类似资料:
  • 主要内容:1 Java8 默认方法的介绍,2 Java8 默认方法的案例1 Java8 默认方法的介绍 Java提供了一种在接口内部创建默认方法的功能。在接口内部定义并带有默认标记的方法称为默认方法。这些方法是非抽象方法。 2 Java8 默认方法的案例 在下面的示例中,Sayable是一个功能接口,其中包含默认值和抽象方法。默认方法的概念用于定义具有默认实现的方法。您还可以覆盖默认方法,以为该方法提供更具体的实现。 输出结果为:  

  • 问题内容: 在Java中,默认情况下所有类都扩展了任何默认类吗? 示例:如果我有一个简单的课程,例如: 此类默认情况下是否扩展了类? 问题答案: class是所有类的超类。 类对象是类层次结构的根。每个类都有Object作为超类。所有对象(包括数组)都实现此类的方法。 您可以测试一下:

  • 我正在做一个游戏,我试图在JFrame中添加一个JPanel。我有一个单独的类来扩展JPanel,我创建了一个新的对象来扩展JPanel。 但是,我得到了这个错误:“类型容器中的方法add(Component)不适用于参数(mainMenu)”(mainMenu是扩展JPanel的类)。 (JPanel类)公共类mainMenu扩展JPanel{ 我希望这样可以向我的JFrame添加一个JPane

  • 最近,我尝试了一些语法来修改文件的小部分。在这些测试用例中,我会保持大部分文件的原样,只是在这里和那里修改一些小的部分,请参见这个回顾问题的示例。 因此,我需要一个(或几个)动作方法(即语法的action类中的方法),在这里我将使用make方法将文件的修改部分附加到match对象。问题是语法本身会有更多的标记/规则/正则表达式,并且嵌套复杂。因此,需要(通过依次调用)将小更改(当前附加到令牌的匹配

  • 当折叠链接已扩展为aria expanded=“true”时,我试图向父div添加一个类,但什么也没有发生。 还有jquery 我还试图通过将. info-title[aria扩展="true"]更改为[aria扩展="true"]并最接近父母来实现它,但它不起作用。

  • 更新问题: 在这一点上,如果有人能给我任何提示,我可以添加任何类型的扩展在运行时在selenium中,我的目标是能够运行脚本,并让chrome安装扩展和活动,因为当你运行chromedriver时,chrome就像香草一样(没有安装或活动的扩展)我试过以下答案,但没有运气,我试过查找视频,查看文档,但我总是失败,如果有人有任何见解,我将非常感谢!!! 当我使用selenium时,我试图解除阻止or