2012-06-07 12 views
8

मैं ईज़ीमोक का उपयोग कर कक्षा TestMe कक्षा का परीक्षण कर रहा हूं, और इसकी विधियों में से एक (method(N n) कहें) N के पैरामीटर की अपेक्षा करता है जिसमें मूल विधि है (nativeMethod() कहें)।क्या एंड्रॉइड/दल्विक में जावा क्लास में मूल विधि को ओवरराइड करना संभव है?

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

     n.nativeMethod(); 

     // Do more stuff 
    } 
} 

method() कुछ बिंदु पर N.nativeMethod() आह्वान करने के लिए जरूरत है, और समस्या मैं आ रही है कि एन के लिए मेरे Easymock नकली वस्तु देशी विधि ओवरराइड करने में असमर्थ है। मेरे पास कक्षा एन का स्वामित्व नहीं है लेकिन मैं किसी भी तरह से 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 एस संस्करण।

क्या यहां कोई कामकाज है जिसका मैं उपयोग कर सकता हूं?

उत्तर

5

native विधियों को किसी भी अन्य तरीकों की तरह ओवरराइड किया जा सकता है, जब तक उन्हें final घोषित नहीं किया जाता है। बस सुनिश्चित करें कि FakeN के उदाहरण के साथ आप TestMe.method(N n) पर कॉल कर रहे हैं।

+0

यही है कि मैंने [इस पृष्ठ] पर टिप्पणियों से सोचा [http://www.coderanch.com/t/380733/java/java/Overriding-Native-Method-java-io) लेकिन ऐसा प्रतीत नहीं हुआ काम। मैं वापस जाऊंगा और यह देखने के लिए जांच करूंगा कि मैंने कुछ गड़बड़ कर ली है या नहीं। – scorpiodawg

+3

यह पता चला है कि मूल विधियों को गैर-मूल द्वारा ओवरराइड किया जा सकता है, और इसके विपरीत भी। 'मूल' हस्ताक्षर का हिस्सा नहीं प्रतीत होता है। – scorpiodawg

संबंधित मुद्दे