Frage an java, inheritance, tostring, override – Java: Entwurfsschnittstelle, um Implementierungen zu zwingen, toString zu überschreiben

11

Ich entwickle einen SPI und möchte einen definierenReportable Schnittstelle so, dass alle Implementierungen überschreiben müssentoString() zu etwas Sinnvollem.

Gibt es in Java eine Möglichkeit, eine Schnittstelle so zu schreiben, dass eine ihrer konkreten ImplementierungenMuss Objekt überschreibentoString()? Zum Beispiel:

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

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

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

Ich weiß, dass der obige Code dies nicht tutMacht diese Art von Verhalten, ist aber ein Beispiel für das, wonach ich suche, d. h. wennWidget überschreibt nichttoString() Sie erhalten einen Kompilierungsfehler, weil er den Schnittstellenvertrag verletzt.

Deine Antwort

2   die antwort
10

Was ich verstehe ist, dass Sie eine Reihe von Klassen erstellen möchten, die ihre Zeichenfolgendarstellungen ordentlich geben. Also das bei sowasSystem.out.println(yourobject) heißt es zeigt aussagekräftige Daten.

Sie können Ihre Unterklassen nicht zwingen, toString zu überschreiben. Aber Sie können so etwas tun.

<code>abstract class MyBase
{
    abstract String getNiceString();
    @Override
    public String toString()
    {
        return getNiceString();
    }
}
</code>
brillant! Dies sollte die akzeptierte Antwort sein. SnakeDoc
genial, danke für die idee. :) Daren
17

Nein, das kannst du nicht. Ich würde vorschlagen, dass Sie eine auswählenanders Methodenname, z.B.

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

Dadurch werden Implementierungen gezwungen, eine geeignete Methode zu schreiben.toString() ist in seiner Absicht schon etwas vage - ob es sich um Debug-Darstellungen handelt, um vom Benutzer sichtbare Darstellungen (an welchem ​​Punkt müssen Sie sich nach Gebietsschemata usw. erkundigen). HinzufügenEin weiterer Sinn scheint mir keine gute Idee zu sein.

Verwandte Fragen