为什么一些Java库方法会委托给具有几乎相同签名的本机方法?
在深入研究JRE库的源代码之后,我注意到一种奇怪的常见代码结构,如下所示:
public int foo(double bar) {
return foo0(bar);
}
private native int foo0(double bar);
这个代码模式的目的是什么,为什么使用它而不是简单地将底层本机方法公开为公共方法
你可以在下面搜索框中键入要查询的问题!
在深入研究JRE库的源代码之后,我注意到一种奇怪的常见代码结构,如下所示:
public int foo(double bar) {
return foo0(bar);
}
private native int foo0(double bar);
这个代码模式的目的是什么,为什么使用它而不是简单地将底层本机方法公开为公共方法
# 1 楼答案
如果有多个具有不同签名的本机foo方法,会发生什么情况?难题。如果您这样做,Java会将类型信息添加到它所查找的方法的名称中。但如果您坚持使用非重载方法,就更容易了
foo0
已被赋予唯一的名称,不应该有理由再添加一个foo0
。这就使得C++的实现简单,它永远不必处理被损坏的名字。即使FoO最终获得过载,它将调用^ {CD3}}而不是^ {CD1}},C++ JNI实现不必处理重载的额外并发症。