这里编程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);
答案 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。