是否有可能覆盖在Android中/ Dalvik的Java类的本地方法?(Is it possibl

2019-07-29 18:51发布

我单元测试类TestMe使用EasyMock的,和它的方法(比如method(N n)预计类型的参数N其具有一个本机方法(比如说nativeMethod()

class TestMe {
    void method(N n) {
        // Do stuff

        n.nativeMethod();

        // Do more stuff
    }
}

method()需要调用N.nativeMethod()在某些时候,和我遇到的问题是,对于N我EasyMock的模拟对象是无法覆盖本地方法。 我不拥有N级,但我可以重构TestMe在任何必要的方式。

我决定把我自己的类FakeN extends N它覆盖nativeMethod什么都不做:

class FakeN extends N {
    FakeN(int pointer) {
        super(pointer);
    }

    @Override
    public void nativeMethod(Object o) {
        // super.nativeMethod() is an actual native method defined as:
        // public native void nativeMethod(Object o)
        //
        // IGNORE
    }
}

但同时,编译器不抱怨,当我运行测试,似乎N.nativeMethod()被调用的一个,而不是FakeN S版。

这儿有解决办法,我可以使用?

Answer 1:

native方法可以被覆盖,就像任何其他的方法,除非将它们声明final 。 只要确保你打电话TestMe.method(N n)与实例FakeN



文章来源: Is it possible to override a native method in a Java class in Android/dalvik?