我有一個Java類,它包含一個本地句柄指針,它只被本地JNI方法使用。讓我們使用這個類(在http://thebreakfastpost.com/2012/01/23/wrapping-a-c-library-with-jni-part-1/找到)爲例:爲JNI控制的字段選擇哪種可見性?
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代碼訪問這個字段。
將該字段設置爲protected或public也是一個糟糕的主意,因爲然後該句柄可以從外部(直接或通過擴展類)進行修改,從而導致崩潰。 Package-private並不是那麼糟糕,但像checkstyle這樣的源代碼分析器的默認設置會抱怨糟糕的編程風格。
當然,我可以添加一個@SuppressWarnings("unused")
註釋來消除日食警告,或者我可以添加一些註釋,以便checkstyle完全忽略問題或禁用check in checkstyle。但我不確定這是否需要,或者我是否做錯了。
那麼在使用JNI代碼的類中,本地句柄的可見性是否存在一些最佳實踐?或者也許他們可以以某種方式完全避免在Java代碼中?