相关疑难解决方法(0)

是否可以在Android/dalvik中覆盖Java类中的本机方法?

TestMe使用EasyMock 对一个类进行单元测试,并且其中一个方法(比如说method(N n))期望一个N具有本机方法的类型的参数(比方说nativeMethod()).

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

        n.nativeMethod();

        // Do more stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

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
    }
}
Run Code Online (Sandbox Code Playgroud)

但是虽然编译器没有抱怨,但是当我运行测试时,它似乎N.nativeMethod()是被调用的而不是 …

java android overriding native-methods easymock

9
推荐指数
1
解决办法
3469
查看次数

使用Java Reflection,您可以检测方法是否为Native?

使用Java Reflection,您可以检测所有方法及其返回类型.但有没有办法检测方法是否被声明native

java reflection native

4
推荐指数
3
解决办法
1829
查看次数