Java的:设计界面来强制实现重写的toString(Java: design interface

2019-06-23 10:43发布

我开发一个SPI和希望定义一个Reportable界面,使得任何实现必须重写toString()的东西,是有意义的。

有没有在Java中的任何方式来写的接口,使得它的任何具体的实现, 必须覆盖对象的toString() ? 例如:

public interface Reportable
{
    public String toString();
}

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

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

我知道上面的代码不会强迫这种行为,但是是什么我要找的,也就是说,如果一个例子Widget没有覆盖toString()你会得到一个编译错误,因为它违反了接口契约。

Answer 1:

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

public interface Reportable
{
    String createReport();
}

这将迫使实现编写了一个合适的方法。 toString()已经在打算有些模糊-无论是用于调试的表示,用户可见的表示(点你需要问自己关于语言环境等处)。 添加另外的意义似乎不是一个好主意,我。



Answer 2:

我的理解是,你要创建一组类整齐地给他们的字符串表示。 所以,当类似System.out.println(yourobject)被称为它显示有意义的数据。

你不能强迫你的子类覆盖的toString。 但是你可以做这样的事情。

abstract class MyBase
{
    abstract String getNiceString();
    @Override
    public String toString()
    {
        return getNiceString();
    }
}


文章来源: Java: design interface to force implementations to override toString