Ist es möglich, einer Sammlung in Java AutoValue einen Wert hinzuzufügen?

8

Ich habe eine Java AutoValue-Klasse mit einem List-Attribut. Ich möchte zulassen, dass der Builder an die Liste angehängt wird, anstatt die gesamte erstellte Liste zu übergeben.

Beispiel:

%Vor%

Was ist die beste Lösung für das Schreiben der AddCard-Funktion? Unterstützt AutoValue das irgendwie schon? Die Eigenschaft intermediate cards in der konstruierten Klasse ist für den Builder nicht sichtbar, sodass ich nicht direkt darauf zugreifen kann. Ich könnte versuchen, den Builder direkt zu umgehen, indem ich meine eigene Kopie von Karten im Builder aufbewahre, ist das die einzige Option hier?

    
user3170530 11.12.2015, 22:52
quelle

2 Antworten

3

Falls jemand es nützlich findet - hier ist der eigentliche Code von dem, was Kevin vorgeschlagen hat. Es war nicht offensichtlich, als ich zum ersten Mal auf seine Antwort stieß, also gehen Sie hier:

%Vor%

Verwendung:

%Vor%

Ausgabe:

%Vor%     
Andrey Mormysh 14.06.2016, 21:54
quelle
7

AutoValue verfügt über einige spezielle Funktionen, die bei der Verwendung von Guavas unveränderbare Sammlungen , da diese Sammlungen alle ihre eigenen Builder-Typen haben. (Und natürlich möchten Sie sicher, dass die Eigenschaften Ihrer Wertklassen unveränderlich sind!)

Eine Funktion ist die Definition einer abstrakten cardsBuilder() -Methode, die einen neuen Builder des entsprechenden Sammlungstyps startet und an den Aufrufer zurückgibt. Das ist super flexibel, aber das Traurige daran ist, dass es "die Kette durchbricht". Der Aufrufer ruft nun ein ImmutableList.Builder auf und kann nicht mehr zum Deck.Builder zurückkehren, um build aufzurufen.

Aber Sie können das ansprechen, indem Sie wie oben gezeigt Ihre eigene addCard -Methode hinzufügen und sie einfach implementieren, um cardsBuilder().add(card) aufzurufen und dann this anstelle des Builders zurückzugeben. Problem gelöst!

Ich glaube, das alles sollte in 1.1 funktional sein, aber bitte lassen Sie uns wissen, wenn Sie Probleme haben!

P.S. Ich entschuldige mich - wir haben eine Menge neues Material für das AutoValue-Benutzerhandbuch, einschließlich dieses Themas, das aufgrund einiger technischer Schwierigkeiten bei der Veröffentlichung auf die öffentliche Website geraten ist.

    
Kevin Bourrillion 11.12.2015 23:29
quelle

Tags und Links