Вопрос по inheritance, tostring, override, java – Java: дизайн интерфейса, чтобы заставить реализации переопределять toString

11

Я разрабатываю SPI и хотел бы определитьReportable интерфейс такой, что любые реализации должны переопределятьtoString() к чему-то значимому.

Есть ли способ в Java написать такой интерфейс, чтобы любая из его конкретных реализацийmust переопределить объектtoString()? Например:

<code>public interface Reportable
{
    public String toString();
}

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

    @Override
    public String toString()
    {
        // ...
    }
}
</code>

Я знаю, что приведенный выше код неforce такого рода поведение, но это пример того, что я ищу, то есть еслиWidget не переопределяетtoString() Вы получаете ошибку компиляции, потому что это нарушает контракт интерфейса.

возможный дубликатForce a class to override the .equals method, Должно быть одинаковым для любого метода. Ciro Santilli 新疆改造中心 六四事件 法轮功
Для абстрактных классов:stackoverflow.com/questions/8719482/… Ciro Santilli 新疆改造中心 六四事件 法轮功

Ваш Ответ

2   ответа
10

Я понимаю, что вы хотите создать набор классов, которые аккуратно дают свои строковые представления. Так что когда что то типаSystem.out.println(yourobject) называется это показывает значимые данные.

Вы не можете заставить ваши подклассы переопределить toString. Но вы можете сделать что-то вроде этого.

abstract class MyBase
{
    abstract String getNiceString();
    @Override
    public String toString()
    {
        return getNiceString();
    }
}
Гениальный, спасибо за идею. :)
блестящий! это должен быть принятый ответ.
17

Нет, вы не можете этого сделать. Я предлагаю вам выбратьdifferent имя метода, например

public interface Reportable
{
    String createReport();
}

Это заставит реализации написать соответствующий метод.toString() уже несколько расплывчато в своем намерении - будь то для отладочных представлений, видимых для пользователя представлений (после чего вам нужно спросить себя о локалях и т. д.). Добавлениеanother значение не кажется мне хорошей идеей.

Похожие вопросы