java - जावा मूल विधियों सार्वजनिक बनाम निजी




jni (2)

मान लें कि हमें स्थानीय कोड में कुछ जावा विधि को लागू करने और उसे उपयोगकर्ता में प्रदर्शित करने की आवश्यकता है। हम जानते हैं कि सभी काम देशी पक्षों द्वारा किया जाता है, यानी जावा कोड की एकमात्र जिम्मेदारी है कि उपयोगकर्ता द्वारा दिए गए मूल कोड के लिए दिए गए तर्क और वापस परिणाम वापस आ गया। इसके अनुसार, जावा परत को दो तरीकों से लागू किया जा सकता है:

  • मूल तरीकों का उपयोग करके जो सीधे उपयोगकर्ता के संपर्क में आते हैं:

    public native Object doSmth(Object arg0, Object arg1);
  • निजी देशी विधि के आसपास पतली सार्वजनिक आवरण का उपयोग करके:

    public Object doSmth(Object arg0, Object arg1) {
        return nativeDoSmth(arg0, arg1);
    }
    
    private native Object nativeDoSmth(Object arg0, Object arg1);

मैंने वास्तविक परियोजनाओं में दोनों दृष्टिकोण और एक ही परियोजना में दोनों पूर्व और बाद के दोनों को देखा है।

तो, मेरा प्रश्न यह है: क्या किसी भी उल्लेखनीय विकल्प में कुछ तकनीकी या प्रदर्शन या रखरखाव के फायदे हैं, जिन्हें केवल एक ही प्रकार का उपयोग करने के लिए प्रोत्साहित करना चाहिए। या शायद यह सब सिर्फ स्वाद की बात है?


तो, मेरा प्रश्न यह है: क्या किसी भी उल्लेखनीय विकल्प में कुछ तकनीकी या प्रदर्शन या रखरखाव के फायदे हैं, जिन्हें केवल एक ही प्रकार का उपयोग करने के लिए प्रोत्साहित करना चाहिए।

रखरखाव लाभ यहाँ की कुंजी है जैसा कि टिप्पणियों में कहा गया है, वस्तु उसके व्यवहार को उजागर करती है यह कैसे लागू किया जाता है उपयोगकर्ता का व्यवसाय नहीं है यह आपको अधिक लचीलेपन देता है।

मान लीजिए कि भविष्य में (देखिए: रखरखाव ) आप पाते हैं कि आपको विधि समायोजित करने की ज़रूरत है / जैसा कि यह मूल कॉल के पहले और / या उसके बाद कुछ भी करता है। पहले दृष्टिकोण में, आपको विधि को हटाना और एक नया बनाना होगा। दूसरे द्वितीय दृष्टिकोण में, आप विधि में जो कुछ भी चाहते हैं उसे जोड़ने के लिए और उपयोगकर्ता को परवाह नहीं है।

प्रदर्शन के लिए, सिद्धांत रूप में, पहला दृष्टिकोण तेजी से है क्योंकि यह 1 कम कॉल है व्यवहार में, यह पूरी तरह नगण्य है


मुझे लगता है कि यह ज्यादातर एक व्यक्तिगत शैली पसंद है यदि आप निम्न कोड पर विचार करते हैं:

रैटियास-मैकबुकप्रो: टीएसटी रैटियास $ डीफेड टेस्ट 1.एएल टेस्ट 1। क्लास रैटीस-मैकबुकप्रो: टीएसटी रिटिट्स $ वी टेस्ट 1.जावा

public class Test1 {
  public static void main(String[] args) {
    Test2 t = new Test2();
    t.m();
  }
}

public class Test2 {
  public native void m();
}

Test1.class यह एक Test1.class उत्पादन करता है Test1.class जो कि Test1.class रूप में परिभाषित किया गया है, जैसा कि निम्नानुसार परिभाषित किया गया है:

public class Test2 {
  public void m() {
  }
}  

इसका मतलब यह है कि आप कार्यान्वयन को मूल, शुद्ध जावा, किसी मूल निजी विधि के लिए एक शुद्ध जावा आवरण, उपयोगकर्ताओं को प्रभावित किए बिना किसी भी समय पर बदल सकते हैं। एक प्रश्न हो सकता है कि क्या एक संपूर्ण सार्वजनिक एपीआई फ़ंक्शन को मूल रूप से बनाये जाने की जरूरत है, बस कंप्यूटिंग का एक हिस्सा है, लेकिन फिर से इसे किसी भी बिंदु पर बदला जा सकता है।





jni