7

假设我有一个接口和许多实现该接口的类。我想强制覆盖toString()每个类中的默认实现(也就是说,如果某些类不覆盖它,那应该会导致编译错误)。

有可能实现吗?在接口主体中声明public abstract String toString();,无论有无@Override注解,都是合法的,但没有任何作用。

4

4 回答 4

14

是的,有点。

protected abstract String internToString();

进而

@Override
public String toString() {
 return internToString(); 
}

在你的基类中。

于 2012-12-01T20:33:49.407 回答
2

编写一个注解和注解处理器,并在编译期间使用它。

您的注释将如下所示:

public @ interface MustOverrideToString { }

并且您的注释处理器将寻找任何类

  1. 使用 MustOverrideToString 注释扩展一个类
  2. 不覆盖 toString
于 2012-12-02T01:31:02.137 回答
1

我认为您不需要将方法的实现声明toString()到特定类中。

于 2012-12-01T20:34:30.377 回答
0

如果您创建abstract类,则不需要另一种方法:

public abstract class Base{
    public abstract String toString();
}

...

public class Sub extends Base{} //will not compile
于 2012-12-02T08:08:51.983 回答