簡體   English   中英

是否可以在Android / dalvik中覆蓋Java類中的本機方法?

[英]Is it possible to override a native method in a Java class in Android/dalvik?

我使用EasyMock對TestMe類進行單元測試,其中一個方法(比如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的版本。

我可以使用這里的解決方法嗎?

除非將它們聲明為final ,否則可以像其他任何方法一樣覆蓋本native方法。 只要確保你打電話TestMe.method(N n)與實例FakeN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM