Унаследовать свойства класса домена Grails из базового класса - PullRequest
2 голосов
/ 26 августа 2011

Я пытаюсь создать конструктор класса домена, который динамически наследует свойства другого класса.Но я не могу заставить его работать должным образом.

Вот пример:

class Example1 {

  String name;
  String location;
}

class Example2 extends Example1 {

  String status;

  public Example2 (Example1 orig){
    // Code here to set this.name and this.location  to name and location from orig
    // dynamically, so adding a field in Example1 does not require me to add that 
    // field here.
  }
}

Ответы [ 3 ]

2 голосов
/ 26 августа 2011

Вы слишком усердно работаете, просто скопируйте свойства:

class Example2 extends Example1 {

   String status

   Example2() {}

   Example2(Example1 orig) {
      this.properties = orig.properties
   }
}
1 голос
/ 08 сентября 2011

После достаточного устранения неполадок и поиска в Интернете я нашел решение, вот оно, если кто-то когда-либо ищет что-то подобное:

public Example2(Example1 orig){
   def d = new DefaultGrailsDomainClass(Example1.class)
   d.persistentProperties.each { val ->
       this[val.name] = orig[val.name]         
   }       
}

Включите это:

import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass
0 голосов
/ 26 августа 2011

Я не совсем понимаю, чего вы хотите достичь, но есть ли причина, по которой вы не можете просто иметь поле "Example1" в классе "Example2"?

...