IAm*_*aja 14 java inheritance overriding tostring
我正在开发一个SPI,并希望定义一个Reportable接口,这样任何实现都必须覆盖toString()有意义的东西.
在Java中有没有办法编写一个接口,使得它的任何具体实现都必须覆盖Object toString()?例如:
public interface Reportable
{
public String toString();
}
public class Widget implements Fizz, Buzz, Reportable
{
// ...
@Override
public String toString()
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码不强制这种行为,但是我正在寻找的一个例子,即如果Widget不覆盖toString()你得到编译错误,因为它违反了接口契约.
Jon*_*eet 17
不,你不能这样做.我建议你选择一个不同的方法名称,例如
public interface Reportable
{
String createReport();
}
Run Code Online (Sandbox Code Playgroud)
这将迫使实现编写适当的方法.toString()它的意图已经有点模糊 - 无论是用于调试表示,用户可见的表示(此时你需要问自己关于语言环境等).添加另一个含义对我来说似乎不是一个好主意.
小智 12
我的理解是你想要创建一组整齐地给出它们的字符串表示的类.因此,当System.out.println(yourobject)称之为类似的东西时,它会显示有意义的数据
您不能强制子类重写toString.但你可以这样做.
abstract class MyBase
{
abstract String getNiceString();
@Override
public String toString()
{
return getNiceString();
}
}
Run Code Online (Sandbox Code Playgroud)