Java:强制实现覆盖 toString 的设计接口(interface)

标签 java inheritance overriding tostring

我正在开发一个 SPI 并想定义一个 Reportable 接口(interface),这样任何实现都必须重写 toString() 为有意义的东西。

在 Java 中有没有什么方法可以编写接口(interface),使其任何具体实现必须覆盖对象的 toString()?例如:

public interface Reportable
{
    public String toString();
}

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

    @Override
    public String toString()
    {
        // ...
    }
}

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

最佳答案

不,你不能这样做。我建议您选择一个不同的方法名称,例如

public interface Reportable
{
    String createReport();
}

这将强制实现编写适当的方法。 toString() 的意图已经有些模糊 - 无论是用于调试表示还是用户可见表示(此时您需要询问自己有关区域设置等)。添加另一个意义对我来说似乎不是一个好主意。

关于Java:强制实现覆盖 toString 的设计接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10054403/

相关文章:

javascript - 将实例属性放在原型(prototype)构造函数中,好还是坏?

c++ - 即使模板类实现了抽象方法,C++ 中的类仍然是抽象的

java - 在android中并行下载位图

java - try/catch 没有finally 是不好的

.net - 解决 F# 中的接口(interface)冲突

inheritance - 为什么在 Julia 中使用抽象类型关键字?

Java:禁止扩展类中的某些方法?

jquery - 如何覆盖以前的 onClick css 类更改 (jQuery)

java - 在 Java Servlet 中生成 JSON 对象

java - Salesforce:在 Salesforce 中为某些配置文件创建用户时收到 "PORTAL_NO_ACCESS"错误消息