有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么一些Java库方法会委托给具有几乎相同签名的本机方法?

在深入研究JRE库的源代码之后,我注意到一种奇怪的常见代码结构,如下所示:

public int foo(double bar) {
    return foo0(bar);
}

private native int foo0(double bar);

这个代码模式的目的是什么,为什么使用它而不是简单地将底层本机方法公开为公共方法


共 (1) 个答案

  1. # 1 楼答案

    private native int foo(double bar);
    
    <>所以,最终它必须调用C++函数来实现。特别是,它最终会调用一个名称如下的函数:

    Java_MyClass_foo
    

    如果有多个具有不同签名的本机foo方法,会发生什么情况?难题。如果您这样做,Java会将类型信息添加到它所查找的方法的名称中。但如果您坚持使用非重载方法,就更容易了

    public int foo(double bar) {
        return foo0(bar);
    }
    
    private native int foo0(double bar);
    

    foo0已被赋予唯一的名称,不应该有理由再添加一个foo0。这就使得C++的实现简单,它永远不必处理被损坏的名字。即使FoO最终获得过载,它将调用^ {CD3}}而不是^ {CD1}},C++ JNI实现不必处理重载的额外并发症。