Pregunta sobre java, override, inheritance, tostring – Java: interfaz de diseño para forzar implementaciones para anular toString

11

Estoy desarrollando un SPI y me gustaría definir unReportable interfaz tal que cualquier implementación debe anulartoString() a algo que es significativo.

¿Hay alguna forma en Java de escribir una interfaz tal que cualquiera de sus implementaciones concretasdebe anular objetostoString()? Por ejemplo:

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

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

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

Sé que el código anterior no lo hacefuerza este tipo de comportamiento, pero es un ejemplo de lo que estoy buscando, es decir, siWidget no anulatoString() Obtienes un error de compilación porque está violando el contrato de interfaz.

Tu respuesta

2   la respuesta
17

no puedes hacer esto. Te sugiero que elijas undiferente nombre del método, por ejemplo

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

Eso obligará a las implementaciones a escribir un método apropiado.toString() ya es algo vago en su intención, ya sea para representaciones de depuración, representaciones visibles por el usuario (en qué momento debe preguntarse acerca de las ubicaciones locales, etc.). Añadiendootro El significado no me parece una buena idea.

10

nen claramente sus representaciones de cadena. Para que cuando algo comoSystem.out.println(yourobject) Se llama muestra datos significativos.

No puedes obligar a tus subclases a anular toString. Pero puedes hacer algo como esto.

<code>abstract class MyBase
{
    abstract String getNiceString();
    @Override
    public String toString()
    {
        return getNiceString();
    }
}
</code>
Ingenioso, gracias por la idea. :) Daren
¡brillante! Esta debe ser la respuesta aceptada. SnakeDoc

Preguntas relacionadas