كيفية تجاوز addto * وإزالة * طرق غسم / غرابر؟

StackOverflow https://stackoverflow.com/questions/1461857

  •  13-09-2019
  •  | 
  •  

سؤال

حاولت تجاوز الطريقة الديناميكية AddTo * المقدمة من الشجر / غورم ولكن لا يبدو أنها تعمل.

هنا هو الرمز:

class Match {
    static hasMany = [players: Player, matchPlayers: MatchPlayer]

    void addToPlayers(Player player) {
        if (players.add(player)) {
            MatchPlayer matchPlayer = new MatchPlayer(match: this, player: player)
            matchPlayers.add(matchPlayer)
        }
    }
}
ma = new Match().save()
ma.addToPlayers(player1)

المشكلة هي أنه عند استدعاء AddToPlayers، حصلت على الاستثناء التالي:

java.lang.NullPointerException: Cannot invoke method add() on null object

لذلك يبدو أنه يجب علي تهيئة نفسي "لاعبين" جمع ".

حسنا، قبل القيام بذلك، أود الحصول على بعض الأفكار حول آلية غواسم:

1 - ما هو التنفيذ الافتراضي للمجموعات في غورم (أعرف أنه تنفيذ java.util.set ولكن أي واحد؟)

2 - هل هو الشيء الصحيح الذي يجب القيام به (عن طريق تجاوز طريقة AddToPlayers)؟ (حالتي الوحيدة هي إنشاء / إزالة MatchPlayer كائن في كل مرة يتم إضافتها / إزالتها في مثيل المباراة). إذا كانت الإجابة بنعم، لماذا لدي استثناء؟ هل لديك تصميم أفضل لهذا؟

شكرا لك.

هل كانت مفيدة؟

المحلول

يشبه الكود الخاص بك طريقة النواب القياسية، راجع التعليمات البرمجية لهذا في org.codehaus.groovy.grails.pluginsdomainclassgrailsplugin.addrelationshipmanationsmethods (). التنفيذ الأول الأولي إما HASHST إذا كنت لا تحدد نوع المجموعة، أو الأشجار إذا حددت مجموعة فرز، على سبيل المثال

static hasMany = [players: Player, matchPlayers: MatchPlayer]
SortedSet players
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top