问题标签 [default-method]
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 - 尝试从程序的主方法调用超类方法时产生错误
我是 Java 新手,正在尝试学习继承的概念。当我尝试使用主类的 identifyMyself 方法()调用 EggLayer 的 identifyMyself()方法时
它按预期工作。但是,当我尝试使用相同的语句从主类的 main method() 调用 EggLayer 的 identifyMyself() 方法时,编译器会生成错误消息:“不是封闭类:EggLayer”。
有人可以向我解释为什么会这样吗?
java - 不同 Java 版本的奇怪默认方法行为
假设我有以下类层次结构:
如您所见,只有MutableSet
类提供了$plus
方法的实现。在测试用例中,我在 type 的实例上调用此方法ArraySet
。测试总是在 CI 环境中通过,而AbstractMethodError
在我的本地环境中总是失败。在这两种情况下,我都使用 Gradle (2.7)。
错误:
测试代码:
java -version
输出:
CI(它工作的地方):
/li>本地(失败的地方):
/li>
我预计这是某种javac
错误,编译器无法添加所有必需的桥接方法(代码编译时没有任何警告或错误)。在 IntelliJ IDEA 中,使用javac
和 Eclipse 编译器都会出现问题。
java - "Property not found on type" when using interface default methods in JSP EL
Consider the following interface:
and the implementing class which just re-uses the default implementation:
Whenever an instance of C
is used in JSP EL scripting context:
-- I receive a PropertyNotFoundException
:
My initial idea Tomcat 6.0 was too old for Java 1.8 features, but I was surprised to see Tomcat 8.0 is also affected. Of course I can work the issue around by calling the default implementation explicitly:
-- but why on earth a default method could be a problem for Tomcat?
Update: further testing reveals default properties can't be found, while default methods can, so another workaround (Tomcat 7+) is:
java - Java:在同一个接口的另一个默认方法中调用一个默认方法
我对 java 8 功能非常陌生,并尝试了解默认方法。有没有比使用匿名类更容易通过同一接口的另一个默认方法调用默认方法的方法?例如:
java - 必须实现默认接口方法吗?
这是一个显示我的问题的简化示例:
在SingleTask
我提供了方法get
和的实现size
,它们是AbstractList
. 但是,当我编译时MyTask
,我仍然会收到如下错误:
MyTask 类型必须实现继承的抽象方法 AbstractCollection.size()
或者
MyTask.java:3:错误:MyTask 不是抽象的,并且不会覆盖 AbstractList 中的抽象方法 get(int)
(取决于编译器)。当然,我使用的是 java 8。
所以我有两个问题:
- 为什么我会收到这些错误?我期待它能够识别默认实现。
- 如果它不应该那样工作,那么在
MyTask
不复制整个代码的情况下使用这两种方法的最简单方法是什么?
java - 在具体类中调用超接口的非抽象方法
Calculator
接口有抽象calculate
方法和ramdom()
非抽象方法。我想在具体类中使用super ramdom()
和Override 。我的问题是为什么我必须这样打电话?为什么不工作?ramdom()
CalculatorImpl
Calculator.super.ramdom()
super.ramdon()
java - 在 lambda 表达式中使用默认方法
根据JLS 15.27.2,lambda 主体与周围上下文具有相同的范围,我想知道是否有特定原因导致 lambda 实现的接口中的默认方法在主体中也不可用? 此限制是否启用了一些优化,或者只是为了保持重载规则简单?
我今天正在对一些 Java 8 API 进行原型设计,当我遇到这个限制时,我非常失望,因为使用默认方法可以让我以一种非常优雅且非侵入性的方式实现该 API。
通过要求静态导入或多或少可以实现相同的优雅,但这会导致“污染”命名空间。
有没有可能取消这个限制?
java - 为什么某些 Object 方法不能从默认方法调用?
在 Java 8 中创建默认方法时,某些Object
方法不能从默认方法中调用。例如:
似乎clone()
并且finalize()
是唯一Object
不允许的方法。巧合的是,这些是唯一Object
受保护的方法,但这个问题特别与默认方法有关,因为它们将被扩展的类继承java.lang.Object
。这是什么原因?
java - 层次实体设计接口
我必须为分层实体设计一个接口:
实现默认 getAncestors()
方法很容易getParent()
,因为前者将返回Stream
所有祖先。
实现示例:
但是我还需要包含this
到流中,这里出现了一个问题。以下行不正确,因为this
它是 type HierarchicalEntity
,而不是T
:
如何重新设计界面以getAncestors()
包含this
在结果中?
java - java8接口允许公共默认方法
在 java 8 中,默认方法实现可以同时使用public
和default
修饰符。以下两种方法之间的主要区别是什么。在什么条件下需要遵循哪种类型。