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

class Person {

  String name
  ...

}

当我尝试覆盖name的setter时,如下所示,我得到StackOverflowError
class SuperHero extends Person {

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

}

似乎使用this.name委托(delegate)给setName进行赋值会导致问题,但我想不出一种解决方法...

最佳答案

这应该可以正常工作:

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
    }
}

关于grails - 如何在不导致StackOverflowError的情况下覆盖子类中的setter?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25520654/

10-12 23:55