相关疑难解决方法(0)

Java8:为什么禁止从java.lang.Object为方法定义默认方法

默认方法是我们的​​Java工具箱中一个不错的新工具.但是,我尝试编写一个定义defaulttoString方法版本的接口.Java告诉我这是禁止的,因为声明的方法java.lang.Object可能不会被default编辑.为什么会这样?

我知道存在"基类永远胜利"规则,因此默认情况下(pun;),方法的任何default实现Object都会被方法覆盖Object.但是,我认为没有理由说明Object规范中的方法不应该有例外.特别是对于toString具有默认实现可能非常有用.

那么,Java设计者决定不允许default方法覆盖方法的原因是什么Object

java interface java-8 default-method

119
推荐指数
3
解决办法
2万
查看次数

接口中的toString(),equals()和hashCode()

所以,我有一个需要实现的一堆方法的接口,方法名称是无关紧要的.

实现此接口的对象通常被放入集合中,并且还具有我希望它们使用的特殊toString()格式.

所以,我认为将hashCode(),equals()和toString()放入接口会很方便,以确保我记得覆盖这些的默认方法.但是当我将这些方法添加到接口时,如果我没有实现这三个方法,IDE/Compiler就不会抱怨,即使我明确地将它们放在接口中.

为什么不对我强制执行?它抱怨如果我没有实现任何其他方法,但它没有强制执行这三个方法.是什么赋予了?有线索吗?

java interface equals tostring hashcode

52
推荐指数
6
解决办法
4万
查看次数

Java:设计接口,强制实现覆盖toString

我正在开发一个SPI,并希望定义一个Reportable接口,这样任何实现都必须覆盖toString()有意义的东西.

在Java中有没有办法编写一个接口,使得它的任何具体实现都必须覆盖Object toString()?例如:

public interface Reportable
{
    public String toString();
}

public class Widget implements Fizz, Buzz, Reportable
{
    // ...

    @Override
    public String toString()
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道上面的代码不强制这种行为,但是我正在寻找的一个例子,即如果Widget不覆盖toString()你得到编译错误,因为它违反了接口契约.

java inheritance overriding tostring

14
推荐指数
2
解决办法
4368
查看次数

在子类中强制执行toString()实现

我有一个抽象的父类,我希望它强制所有子类实现toString()方法.

但是放:

public abstract String toString();
Run Code Online (Sandbox Code Playgroud)

导致编译错误:

Repetitive method name/signature for method 'java.lang.String toString()' in class ...
Run Code Online (Sandbox Code Playgroud)

我相信这可能是由已经定义了toString的groovy引起的.

谢谢

java grails groovy

13
推荐指数
3
解决办法
7047
查看次数