假设我们需要在 native 代码中实现一些 java 方法并将其公开给用户。我们知道所有的工作都是由 native 端完成的,即 java 代码的唯一职责是将用户提供的参数传递给 native 代码并返回结果。据此,java层可能有两种实现方式:
通过使用直接向用户公开的 native 方法:
public native Object doSmth(Object arg0, Object arg1);
通过使用围绕私有(private)本地方法的瘦公共(public)包装器:
public Object doSmth(Object arg0, Object arg1) { return nativeDoSmth(arg0, arg1); } private native Object nativeDoSmth(Object arg0, Object arg1);
我在实际项目中看到过这两种方法,甚至在同一个项目中同时看到了前者和后者。
所以,我的问题是:是否有任何提到的替代方案具有一些技术或性能或可维护性优势,应该鼓励只使用一种变体。或者,也许这只是一个品味问题?
最佳答案
So, my question is: does any of mentioned alternatives have some technical or performance or maintainability advantages, that should encourage to use only one variant.
可维护性优势是这里的关键。如评论中所述,该对象公开了其行为。它如何实现不是用户的事。这为您提供了更大的灵 active 。
假设将来(请参阅:可维护性)您发现您想要/需要调整该方法,使其在 native 调用之前和/或之后执行某些操作。在第一种方法中,您需要弃用该方法并创建一个新方法。在第二种方法中,您只需在方法中添加您需要的任何内容,用户并不关心。
至于性能,理论上,第一种方法更快,因为它少了一次调用。实际上,它完全可以忽略不计。
关于Java native 方法。公共(public)与私有(private),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41474772/