通过接口契约强制(重新)实现现有方法?

Cod*_*der 1 java interface

我有一个用例,我需要对象StringtoString()方法中提供合理的输出(不是默认Object.toString()输出).我正在考虑toString()通过Interface契约实施方法实现.

就像是,

interface TestInterface {
    public String toString();
}

class TestClass implements TestInterface {
    // But there's no need to implement toString() since it's already present as part of Object class.
}
Run Code Online (Sandbox Code Playgroud)

但是在评论中,它并没有强制实施该toString()方法.

我有2个解决方法,

使接口成为一个抽象类,

abstract class TestInterface {
    public abstract String toString();
}

class TestClass extends TestInterface {
    // You will be enforced to implement the toString() here.
}
Run Code Online (Sandbox Code Playgroud)

但这似乎只是为了提供合同而过度杀伤.这也意味着该课程不能从任何其他课程延伸.


将方法名称更改为其他名称.

interface TestInterface {
    public String toSensibleString();
}

class TestClass implements TestInterface {
    // Should implement it here.
}
Run Code Online (Sandbox Code Playgroud)

但这意味着,那些已经覆盖该toString()方法的类需要有一个不必要的方法.此外,它只意味着那些了解接口的类将获得正确的String.


那么,有没有办法提供(重新)实现现有方法的合同

注意:我发现了这个类似的问题,但我认为这与 Groovy有关(而且他的问题根本不是Java中的问题).

Luk*_*der 5

您无法Object从接口强制执行此类方法.你不应该.依靠Object.toString()不是一个好主意.这是你最好的方法:

interface TestInterface {
    public String toSensibleString();
}
Run Code Online (Sandbox Code Playgroud)