2012-10-29 17 views
9

आंतरिक रूप से जावा के लिए बेहतर क्या है, या इष्टतम क्या है, या मानक क्या है: स्थिरांक वाले वर्ग को लागू करें या डॉट नोटेशन का उपयोग करें?लागू वर्ग या आयात वर्ग जावा

उदाहरण:

विकल्प 1:

import com.myproject.Constantes; 

public class myClass { 
    myClass() { 
     System.out.println("Math: " + Constantes.PI); 
    } 
} 

विकल्प 2:

import com.myproject.Constantes; 

public class myClass implements Constantes { 

    myClass() { 
     System.out.println("Math: " + PI); 
    } 
} 

कौन सा बेहतर है और क्यों है? एमवीजे उपयोग, संसाधन, गति?

+3

http://programmers.stackexchange.com/questions/49572/is-it-a-bad-practice-to-have-an-interface-to-define-constants – Jayan

+0

न तो एक और दो। मुझे दोनों समाधान पसंद नहीं हैं। इसके साथ आप इस स्थिरांक वर्ग के लिए प्रत्यक्ष निर्भरता प्राप्त करेंगे। स्थिरांक को कक्षा में रखें जहां वे तकनीकी रूप से/कार्यात्मक – semTex

+1

रनटाइम पर कोई अंतर नहीं हैं। – ignis

उत्तर

9

तो Constantes विशुद्ध रूप से स्थिरांक का एक संग्रह है (जैसा कि नाम का तात्पर्य) और कार्यक्षमता है कि आप myClass में बेनकाब करने के लिए है, तो ए) की जरूरत है यह एक interface नहीं होना चाहिए, और बी को परिभाषित नहीं करता) आप नहीं करना चाहिए इसे लागू/विस्तारित करें। इसे आयात करें और इसे विकल्प 1 के रूप में उपयोग करें।

+0

असल में, मुझे एक इंटरफ़ेस मिला है जिसमें केवल स्थिरांक हैं। कोई संरचना, कोई विधि, केवल चर के अंतर्गत आता है। यह एक दराज आपदा की तरह है। और मुझे एक कक्षा मिली है जो उस इंटरफ़ेस को लागू करती है लेकिन कोड "Constantes.name_constant" से 100 गुना अधिक बार दोहराया गया है और मैंने सोचा था कि "उस कोड को दोबारा लागू और प्रतिस्थापित करें (Constantes.name_constant) और अकेले छोड़ें (name_constant) "। – Marquake

+0

@ user1782602: यह आपका निर्णय है। मैं नहीं करता, मैं कोड में 'Constantes.name_constant' उपयोग छोड़ दूंगा। यह एक बात के लिए अच्छा और स्पष्ट है, और यह नहीं कहता कि आपकी कक्षा कुछ ऐसा लागू करती है जो वास्तव में लागू नहीं होती है। JVM के संदर्भ में, मुझे नहीं लगता कि यह एक तरफ या दूसरे परवाह करता है। –

+0

समझा, एक मॉडल का सम्मान करना चाहिए और कक्षा पदानुक्रम का अच्छा उपयोग करना चाहिए। यहां दुरुपयोग कर रहे हैं और मैं इसे करने के आपके तरीके से सहमत हूं। आपका बहुत बहुत धन्यवाद! – Marquake

1

आप यहां दो अलग-अलग चीजें कर रहे हैं। पहले खंड में आप केवल Constantes वर्ग/इंटरफ़ेस में संदर्भ सामग्री के साथ कोड लिख रहे हैं और इस प्रकार import 'ed होना चाहिए जबकि दूसरे खंड में, आप बता रहे हैं कि आपका कोड Constantes इंटरफ़ेस के अनुरूप होना चाहिए, यानी इसमें किसी भी और सभी तरीकों को लागू करना।

चीयर्स,

1

implements (एक अंतरफलक, नहीं एक वर्ग) का कहना है कि myClass अनुबंध Constantes (आमतौर पर कुछ विधि विनिर्देशों कि अपनी कक्षा में लागू किया जाना चाहिए के साथ) द्वारा निर्दिष्ट सम्मान करना चाहिए।

कृपया किसी भी दिए गए भाषा की विशिष्टताओं में शामिल होने से पहले ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (प्रोग्रामिया ओरिएंटाडा ओबेटेटोस) अवधारणाओं के बारे में जांचें।

+0

असल में, मुझे एक इंटरफ़ेस मिला है जिसमें केवल स्थिरांक हैं। कोई संरचना, कोई विधि, केवल चर के अंतर्गत आता है। यह एक दराज आपदा की तरह है। और मुझे एक कक्षा मिली है जो उस इंटरफ़ेस को लागू करती है लेकिन कोड "Constantes.name_constant" से 100 गुना अधिक बार दोहराया गया है और मैंने सोचा था कि "उस कोड को दोबारा लागू और प्रतिस्थापित करें (Constantes.name_constant) और अकेले छोड़ें (name_constant) "। – Marquake

+0

ठीक है, मैंने आपके प्रश्न को गलत समझा। फिर पीटर लॉरी का जवाब सही होना चाहिए, इसे इस तरह चिह्नित करें। – SJuan76

+0

नहीं, आपका उत्तर सही है। मैं पूरी तरह से समझता हूं और इसे लागू करने का प्रयास करता हूं। मैं धीरे-धीरे इस परियोजना को बेहतर बनाने की कोशिश कर रहा हूं धन्यवाद! :) – Marquake

3

विकल्प 1 का उपयोग किया जाना चाहिए, क्योंकि यह निश्चित रूप से आयातित कक्षा में परिभाषित निरंतर उपयोग करेगा।

यदि आपके पास MyClass में पीआई नामक एक स्थानीय चर था, तो विकल्प 2 आप आयातित वर्ग में से एक के बजाय वैरिएबल होगा।

1

अक्सर स्पष्टता प्रदर्शन की तुलना में अधिक महत्वपूर्ण है और यह कोई अपवाद नहीं है।

विकल्प 1 विकल्प 2 को प्राथमिकता दी जाती है क्योंकि बाद वाला यह दर्शाता है कि myClass एक Constantes है जो समझ में नहीं आता है।

जावा 5.0 के बाद से आपके पास एक और विकल्प है जो बेहतर हो सकता है।

import static com.myproject.Constantes.PI; 
// OR 
import static com.myproject.Constantes.*; 

public class MyClass{ 
    MyClass(){ 
     System.out.println("Math: " + PI); 
    } 
} 
+0

धन्यवाद! मुझे एक प्रोजेक्ट 1.4 के साथ किया गया है: (मुझे डर है कि मैं इसे बदल नहीं सकता लेकिन मैं 1.5 में भी हूं और इसे लागू करने का प्रयास करता हूं, मुझे नहीं पता था कि यह किया जा सकता है। – Marquake

+0

इसके लायक कुछ भी नहीं जावा 6 के लिए सार्वजनिक अपडेट्स को फरवरी 2013 तक बढ़ा दिया गया है। https://blogs.oracle.com/henrik/entry/java_6_eol_h_h अगर आपको अपडेट करने का मौका मिलता है, तो मैं जावा 7 पर जावा 7 पर गंभीरता से विचार नहीं करता। –

3

मुझे लगता है कि विकल्प 1 का उपयोग वर्तमान कक्षा में आंतरिक रूप से परिभाषित एक और पीआई को गलत तरीके से परिभाषित करने से बचने के लिए किया जाना चाहिए।

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