一个Java类做如下操作:
您可以假设本地方法会执行一些操作,这些操作可能会导致本地代码调用
我有两个相关的问题:
1. 我认为本地代码必须在该对象上拥有一个句柄,并调用
2. 如果可以,在未初始化的final字段上的语义是什么?
如果问题1的答案是肯定的,那么我期望问题2在访问时会崩溃,因此我想我们需要将其设置为
请注意,我无法控制本地库的行为。
public class Foo {
private final NativeCallbackHandler handler;
public Foo(NativeCallbackHandler handler) {
// I've shortened this for exposition, callSomeNativeMethod
// really happens in a superclass that I don't own (and is
// part of the lib that gives me the native part)
callSomeNativeMethod();
this.handler = handler;
}
public void handleNativeCallback(Object args) {
this.handler.callback(args);
}
private native int callSomeNativeMethod();
}
您可以假设本地方法会执行一些操作,这些操作可能会导致本地代码调用
handleNativeMethod
。我有两个相关的问题:
1. 我认为本地代码必须在该对象上拥有一个句柄,并调用
GetMethodID
来获取访问要调用的方法的权限。那么,在对象完全初始化之前,本地代码能否调用该方法?2. 如果可以,在未初始化的final字段上的语义是什么?
如果问题1的答案是肯定的,那么我期望问题2在访问时会崩溃,因此我想我们需要将其设置为
AtomicReference
以便安全地访问它而不会崩溃。请注意,我无法控制本地库的行为。