2017-01-18 1 views
0

Programmierung noob hier, also wahrscheinlich eine dumme Frage, aber es gibt keinen plus-gleich (+ =) Operator für eine ThreadLocal-Variable in Java, oder? So etwas funktioniert:ThreadLocal plus-gleich (+ =) in Java?

public static ThreadLocal<Double> tl = new ThreadLocal<>(); 
public double whatever; 
//stuff here 
double temp = tl.get()+whatever; 
tl.set(temp); 

oder die letzten beiden Zeilen zu ersetzen mit:

tl.set(tl.get()+whatever); 

Ich wollte nur sicherstellen, dass es keine andere Art und Weise. Es wäre schön, wenn es so etwas wie war:

tl.add(whatever); 
+0

Es gibt keinen solchen Operator für Thread Variable. –

+1

Da 'ThreadLocal' vom generischen Typ ist (buchstäblich), gibt es keine Möglichkeit, eine solche Methode zur Verfügung zu stellen. Was würde 'add' zum Beispiel für' ThreadLocal 'zu erwarten sein? – Quota

+0

@Quota: Touché. –

Antwort

0

In der Tat gibt es keine Add-Methode in der Klasse Thread. Schau here.

1

In Java wird kein Operator überladen. Das kannst du nicht tun. Auf der anderen Seite könnte man es in einer Sprache wie C++ tun.

2

ThreadLocal kann Objekt eines beliebigen bereitgestellten Typs enthalten und damit arbeiten, daher ist die Methode "add" einfach nicht "generisch" genug. Sie können Ihr Objekt einstellen, Sie können Ihr Objekt bekommen, und wenn Sie einen Bezug darauf haben, können Sie tun, was Sie brauchen, aber es ist nicht in der Verantwortung von ThreadLocal.

2

Der Grund, warum Sie die Operation += nicht ausführen können, liegt darin, dass in Java Primitive als Wert und nicht als Referenz übergeben werden. Was beim Aufruf von .get() passiert, ist, dass eine Kopie des gehaltenen Wertes zurückgegeben wird und kein Zeiger auf den tatsächlichen Wert. Daher hat das Ändern des zurückgegebenen Werts keine Auswirkung.

Sie müssen das von Ihnen beschriebene .set(tl.get()+x) Idiom verwenden.

Verwandte Themen