Die feine Twitter-util-Bibliothek hat die folgende Java-Klasse, die um eine Scala-Klasse erweitert wird, die das flüchtige Feld liest und es mit AtomicReferenceFieldUpdater aktualisiert. Der Zugriff muss mindestens privat sein, d. H. Anderen Status zulassen.
Stimmt der Motivationsanspruch im Kommentar? Wie wahr? ("Wie" bedeutet in welcher Weise und in welchem Maße.)
%Vor%Etwas wie das Folgende funktioniert.
Wenn Sie das Feld "privat [this]" machen, wird es zur gewünschten Feldreferenz ("getfield").
Der Zugriff von einer anderen Instanz erfolgt über einen Accessor "state ()", der, wenn er @inline gemacht wird, die Zugriffsbeschränkung auf das Feld lockern wird.
Das bedeutet auch, dass der Updater (der sich zufällig im Begleitmodul befindet) ebenfalls darauf zugreifen kann.
(Da der normale Zugriffsmechanismus für die Variable nicht für ein Objekt-privates Element ausgegeben wird, können Sie eigene definieren, indem Sie parens verwenden. Sie müssen jedoch nicht an der Aufruf-Site, dem other.state, Parens verwenden Zugang Prinzip Dollar bei der Arbeit. Oder Schweizer Franken.)
Bemerken Sie auch die total hip Verwendung von 'new'
in Backticks für einen Parameternamen. Ich weiß nicht, wie man die Ticks in diesem Markup erscheinen lässt. Da beide Params vom selben Typ sind, möchte man wahrscheinlich cas(expect=prev, 'new'=changed)
schreiben, also hätte ich vielleicht stattdessen next
verwendet, aber wenn dieses Markup einen Hipster-Daumen hoch unterstützt, würde ich es sofort geben. : +1: Hat es funktioniert? Kann jemand meinen Daumen sehen? [Ich glaube, ich habe das auf GitHub gesehen. Hubster, nicht Hipster.]
Zeigen Sie, dass state () wirklich inline ist:
%Vor%Es ist nicht nur "OK, eigene Fragen zu stellen und zu beantworten",
es ist unendlich befriedigender.
(Mehr Macht für Daniel Sobral, Rex Kerr, Retronym und den Rest der Justice League.)
Tags und Links scala