如何在不导致StackOverflowError的情况下覆盖子类中的setter?

时间:2014-08-27 06:53:48

标签: grails groovy

我定义了一个类似于以下的类:

class Person {

  String name
  ...

}

当我尝试覆盖name的设置器时,如下所示,我得到StackOverflowError

class SuperHero extends Person {

  void setName(String name) {
    this.name = deriveSuperHeroName(name)
  }

}

似乎使用this.name委托给setName导致问题的分配,但我想不出办法来解决它......

1 个答案:

答案 0 :(得分:3)

这个应该可以正常工作:

class Person 
{
    String name
}

class SuperHero extends Person 
{
    @Override
    void setName(String name) 
    {
        super.setName(deriveSuperHeroName(name))
    }

    def deriveSuperHeroName(name)
    {
        name
    }
}

或者没有@Override注释:

class SuperHero extends Person 
{
    void setName(String name) 
    {
        super.setName(deriveSuperHeroName(name))
    }

    def deriveSuperHeroName(name)
    {
        name
    }
}