Java中的ThreadLocal plus-equals(+ =)?

时间:2017-01-18 14:03:51

标签: java operators thread-local

这里编程noob,所以可能是一个愚蠢的问题,但是Java中的ThreadLocal变量没有plus-equals(+ =)运算符,是吗?这种事情很好:

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

或用以下代码替换最后两行:

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

只是想确保没有别的办法。如果有类似的东西,那就太好了。

tl.add(whatever);

4 个答案:

答案 0 :(得分:2)

ThreadLocal可以包含和使用任何提供类型的对象,因此方法&#34;添加&#34;只是不是&#34;泛型&#34;足够。你可以设置你的对象,你可以获得你的对象,并且可以参考它,你可以做任何你需要的事情,但它不属于ThreadLocal的责任。

答案 1 :(得分:2)

您无法执行+=操作的原因是因为在Java中,基元作为值而不是引用传递。当你调用.get()时最终会发生什么,它会返回一个值的副本,而不是指向实际值的指针。因此,更改返回的值将不起作用。

您需要使用您描述的.set(tl.get()+x)习语。

答案 2 :(得分:1)

Java中没有运算符重载。你不能这样做。另一方面,用C ++这样的语言可以做到。

答案 3 :(得分:0)

在契约中,ThreadLocal类中没有add方法。看here