我有一个 Java 类,它包含一个仅由本机 JNI 方法使用的本机句柄指针。让我们以这个类(位于http://thebreakfastpost.com/2012/01/23/wrapping-ac-library-with-jni-part-1/)为例:
public class Plugin
{
private long nativeHandle;
protected Plugin(long handle) {
nativeHandle = handle;
}
public native String getIdentifier();
public native String getName();
public native String getDescription();
public native int getPluginVersion();
}
所以这个例子中的句柄是私有的。JNI 不关心可见性。但是像 Eclipse 中的源代码分析器会抱怨该字段,因为它没有被使用。Eclipse 不知道有一些 JNI 代码可以访问该字段。
将字段设置为受保护或公共也是一个坏主意,因为这样可以从外部(直接或通过扩展类)修改句柄,这会导致崩溃。Package-private 并没有那么糟糕,但是像 checkstyle 这样的源代码分析器的默认设置抱怨编程风格不好。
当然,我可以添加@SuppressWarnings("unused")
注释以使 eclipse 警告静音,或者我可以添加一些注释,以便 checkstyle 忽略该问题或完全禁用 checkstyle 中的检查。但我不确定是否需要这样做,或者我是否只是做错了。
那么,对于使用 JNI 代码的类中的本地句柄的可见性,是否有一些最佳实践?或者也许可以在 Java 代码中完全避免它们?