我正在开发一个 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/