2012-06-07 13 views
8

Estoy probando la unidad de una clase TestMe usando EasyMock, y uno de sus métodos (digamos method(N n)) espera un parámetro del tipo N que tiene un método nativo (digamos nativeMethod()).¿Es posible anular un método nativo en una clase Java en Android/dalvik?

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

     n.nativeMethod(); 

     // Do more stuff 
    } 
} 

method() necesita invocar N.nativeMethod() en algún momento, y el problema que estoy teniendo es que mi EasyMock objeto de burla para N no es capaz de reemplazar el método nativo. No soy dueño de la clase N pero puedo refactorizar TestMe de cualquier forma que sea necesaria.

decidí hacer mi propia clase FakeN extends N que anula nativeMethod no hacer nada:

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 
    } 
} 

pero mientras que el compilador no se queja, cuando corro la prueba parece ser que N.nativeMethod() es el que está siendo invocado y no FakeN s versión.

¿Hay alguna solución aquí que pueda usar?

Respuesta

5

Los métodos native se pueden anular como cualquier otro método, a menos que se declaren final. Solo asegúrese de llamar al TestMe.method(N n) con una instancia de FakeN.

+0

Eso es lo que pensé de los comentarios en [esta página] (http://www.coderanch.com/t/380733/java/java/Overriding-Native-Method-java-io) pero no parecía trabajo. Volveré y comprobaré si arruiné algo. – scorpiodawg

+3

Resulta que los métodos nativos pueden ser reemplazados por no nativos y viceversa. 'native' parece no ser parte de la firma. – scorpiodawg

Cuestiones relacionadas