假设我们需要在本地代码中实现一些Java方法并将其暴露给用户。 我们知道所有的工作都由本地端完成,即Java代码的唯一责任是将用户提供的参数传递给本地代码并返回结果。 根据这一点,可以使用两种方式实现Java层:
通过直接向用户公开的本机方法:
public native Object doSmth(Object arg0, Object arg1);
通过在私有本地方法周围使用轻量级的公共包装器:public Object doSmth(Object arg0, Object arg1) {
return nativeDoSmth(arg0, arg1);
}
private native Object nativeDoSmth(Object arg0, Object arg1);
我在实际项目中看到了这两种方法,甚至有些项目中都同时使用前一种和后一种方法。
那么,我的问题是:这两种提到的方法中是否有任何技术、性能或可维护性优势,应该鼓励只使用一个变体。或者说,这完全只是个人喜好的问题?
public
方法是对象API的一部分。一个native
方法是实现决策。实现细节不应该对公共API可见。选项2从API中隐藏了实现细节。 - Andreas