【发布时间】:2019-03-28 12:16:37
【问题描述】:
VarHandle 显示以下错误 -
Exception in thread "main" java.lang.NoSuchMethodError: VarHandle.compareAndSet(VarHandleExample,int,int)void
at java.base/java.lang.invoke.MethodHandleNatives.newNoSuchMethodErrorOnVarHandle(MethodHandleNatives.java:492)
at java.base/java.lang.invoke.MethodHandleNatives.varHandleOperationLinkerMethod(MethodHandleNatives.java:445)
at java.base/java.lang.invoke.MethodHandleNatives.linkMethodImpl(MethodHandleNatives.java:378)
at java.base/java.lang.invoke.MethodHandleNatives.linkMethod(MethodHandleNatives.java:366)
at j9.VarHandleExample.update(VarHandleExample.java:23)
at j9.VarHandleExample.main(VarHandleExample.java:14)
我的计划是:
import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
public class VarHandleExample {
public int publicTestVariable = 10;
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
VarHandleExample e= new VarHandleExample();
e.update();
}
public void update() throws NoSuchFieldException, IllegalAccessException {
VarHandle publicIntHandle = MethodHandles.lookup()
.in(VariableHandlesTest.class)
.findVarHandle(VarHandleExample.class, "publicTestVariable", int.class);
publicIntHandle.compareAndSet(this, 10, 100); // CAS
}
}
【问题讨论】:
-
嗨,stack sn-ps 不运行 Java。请编辑以将其列为代码而不是 sn-p。
-
你是如何执行这段代码的?它是在 Java9+ 上执行的吗? VarHandle.compareAndSet(VarHandleExample,int,int)void 在堆栈跟踪中很奇怪
-
我在 java 10 上的 eclipse 中执行这段代码
-
@user3168018 因为该方法确实存在。您能否检查您的 Eclipse 版本及其与您正在运行的 JDK 版本的兼容性?看起来主要是配置问题。例如,您可以在使用 eclipse 的代码中使用
var吗? -
No var 不起作用。但 VarHandle.getAndAdd(this, 210) 工作正常。
标签: java java-9 methodhandle