"आयात" के बाद "स्थिर" संशोधक का क्या अर्थ है?


438

जब इस तरह इस्तेमाल किया:

import static com.showboy.Myclass;

public class Anotherclass{}

क्या बीच का अंतर है import static com.showboy.Myclassऔर import com.showboy.Myclass?

जवाबों:


390

प्रलेखन देखें

स्थैतिक आयात घोषणा सामान्य आयात घोषणा के अनुरूप है। जहां सामान्य आयात घोषणा संकुल से कक्षाओं का आयात करती है, उन्हें पैकेज योग्यता के बिना उपयोग करने की अनुमति देती है, स्थैतिक आयात घोषणा कक्षाओं से स्थिर सदस्यों को आयात करती है, जिससे उन्हें कक्षा योग्यता के बिना उपयोग करने की अनुमति मिलती है।

तो आपको स्थैतिक आयात का उपयोग कब करना चाहिए? बहुत विरल! केवल तब ही इसका उपयोग करें जब आपको अन्यथा स्थिरांक की स्थानीय प्रतियाँ घोषित करने, या वंशानुक्रम (कॉन्स्टेंट इंटरफ़ेस एंटीट्रोनफ़ॉर्म) का दुरुपयोग करने के लिए लुभाया जाएगा। दूसरे शब्दों में, इसका उपयोग तब करें जब आपको एक या दो वर्गों के स्थिर सदस्यों तक लगातार पहुंच की आवश्यकता हो। यदि आप स्थैतिक आयात सुविधा का उपयोग करते हैं, तो यह आपके प्रोग्राम को अपठनीय और असंदिग्ध बना सकता है, आपके द्वारा आयात किए जाने वाले सभी स्थैतिक सदस्यों के साथ इसके नामस्थान को प्रदूषित करता है। आपके कोड के पाठक (आपके सहित, आपके लिखे जाने के कुछ महीने बाद) को यह पता नहीं होगा कि एक स्थिर सदस्य किस वर्ग से आता है। सभी स्थिर सदस्यों को एक वर्ग से आयात करना विशेष रूप से पठनीयता के लिए हानिकारक हो सकता है; यदि आपको केवल एक या दो सदस्यों की आवश्यकता है, तो उन्हें व्यक्तिगत रूप से आयात करें। उचित रूप से प्रयुक्त, स्थैतिक आयात आपके कार्यक्रम को अधिक पठनीय बना सकता है,


28
मैं पूरी तरह से @xsl द्वारा चेतावनी के साथ सहमत हूँ। एक क्षेत्र जहां यह निश्चित रूप से बहुत उपयोगी होता है, वह है जूनियर के मुखर के लिए : स्थैतिक org.junit.Assert आयात करें। * आपके सभी यूनिट परीक्षणों के लिए।
BxlSofty

3
- सरल व्याख्या लिखने के बजाय, बहुत लंबे समय तक चिपकाने और वास्तव में आंख को पकड़ने वाली प्रलेखन फ़ाइल को नियंत्रित करने के लिए।
बोल्केज माइकेल

@xsl क्या पोस्ट का निचला हिस्सा उद्धरण ब्लॉक में होना चाहिए? ऐसा लगता है कि आपने इसे टाइप किया है।
फेरीबिग

1
@ फेरीबिग: यह लिंक्ड डॉक्यूमेंटेशन का एक उद्धरण है।
जोशुआ स्नाइडर

यह की तरह है includeरूबी में!
क्लो

227

उन दो आयातों के बीच कोई अंतर नहीं है जो आप राज्य करते हैं। हालाँकि, आप अन्य वर्गों के स्थिर सदस्यों तक अयोग्य पहुंच की अनुमति देने के लिए स्थैतिक आयात का उपयोग कर सकते हैं। जहाँ मुझे यह करना पड़ता था:

import org.apache.commons.lang.StringUtils;
      .
      .
      .
if (StringUtils.isBlank(aString)) {
      .
      .
      .

मे यह कर सकती हु:

import static org.apache.commons.lang.StringUtils.isBlank;
      .
      .
      .
if (isBlank(aString)) {
      .
      .
      .

आप दस्तावेज़ में अधिक देख सकते हैं ।


57

स्थैतिक आयात का उपयोग इसके स्थान पर स्थिर फ़ील्ड / विधि का आयात करने के लिए किया जाता है:

package test;

import org.example.Foo;

class A {

 B b = Foo.B_INSTANCE;

}

तुम लिख सकते हो :

package test;

import static org.example.Foo.B_INSTANCE;

class A {

 B b = B_INSTANCE;

}

यह उपयोगी है यदि आप अक्सर अपने कोड में किसी अन्य वर्ग से एक स्थिरांक का उपयोग किया जाता है और यदि स्थैतिक आयात अस्पष्ट नहीं है।

Btw, आपके उदाहरण में "स्थैतिक org.example.Myclass आयात करें;" काम नहीं करेगा: आयात वर्ग के लिए है, आयात स्थिर वर्ग के स्थिर सदस्यों के लिए है।


37

स्टैटिक इम्पोर्ट का मूल विचार यह है कि जब भी आप स्टैटिक क्लास, स्टेटिक वैरिएबल या एनम का उपयोग कर रहे हैं, तो आप उन्हें इम्पोर्ट कर सकते हैं और कुछ टाइपिंग से खुद को बचा सकते हैं।

मैं उदाहरण के साथ अपनी बात को विस्तृत करूंगा।

import java.lang.Math;

class WithoutStaticImports {

 public static void main(String [] args) {
  System.out.println("round " + Math.round(1032.897));
  System.out.println("min " + Math.min(60,102));
 }
}

स्थिर आयात के साथ समान कोड:

import static java.lang.System.out;
import static java.lang.Math.*;

class WithStaticImports {
  public static void main(String [] args) {
    out.println("round " + round(1032.897));
    out.println("min " + min(60,102));
  }
}

नोट : स्थिर आयात आपके कोड को पढ़ने के लिए भ्रमित कर सकता है।


4
क्या इसका मतलब import static java.lang.Mathबिना तार के लिखना होगा ?
क्रिस मिडलटन

1
@AmadeusDrZaius नहींं, आयात स्थैतिक केवल एक वर्ग के स्थिर सदस्यों के लिए है।
हैरी

1
अच्छा उत्तर! चूँकि कई 'न्यूबॉक्सेस' इस पोस्ट को पढ़ते हैं, इसलिए किसी को थोड़ी चेतावनी देनी चाहिए: नाम स्थान के प्रदूषण को रोकने के लिए तारांकन चिह्न का अधिक उपयोग न करें
गोएर्लिब

24

"स्टैटिक कॉम.शोबॉय.माइकलेस" और "इम्पोर्ट कॉम.शोबॉय.माइकलेस" के बीच का अंतर?

पहला संकलक त्रुटि उत्पन्न करना चाहिए क्योंकि स्थैतिक आयात केवल फ़ील्ड या सदस्य प्रकारों के आयात के लिए काम करता है। (यह मानते हुए कि MyClass एक आंतरिक वर्ग या शोबॉय से सदस्य नहीं है)

मुझे लगता है कि आपका मतलब था

import static com.showboy.MyClass.*;

जो सभी स्थिर क्षेत्रों और MyClass के सदस्यों को योग्य बनाने के लिए वास्तविक संकलन इकाई में उपलब्ध कराता है ... जैसा कि ऊपर बताया गया है


14

importजावा प्रोग्रामर को पैकेज की योग्यता के बिना पैकेज की कक्षाओं तक पहुंचने की अनुमति देता है।

static importसुविधा वर्ग योग्यता के बिना एक वर्ग के स्थिर सदस्यों का उपयोग करने की अनुमति देता है।

importवर्गों तक पहुँच प्रदान करता है और इंटरफेस जबकि static importवर्ग के स्थिर सदस्यों तक पहुँच प्रदान करता है।

उदाहरण :

आयात के साथ

import java.lang.System.*;    
class StaticImportExample{  
    public static void main(String args[]){  

       System.out.println("Hello");
       System.out.println("Java");  

  }   
} 

स्थिर आयात के साथ

import static java.lang.System.*;    
class StaticImportExample{  
  public static void main(String args[]){  

   out.println("Hello");//Now no need of System.out  
   out.println("Java");  

 }   
} 

इसे भी देखें: जावा 5 में स्टैटिक इम्पोर्ट क्या है


2

कहते हैं कि तुम एक वर्ग कहा जाता है के अंदर स्थिर क्षेत्रों और तरीकों MyClassएक पैकेज बुलाया अंदर myPackageऔर आप उन्हें टाइपिंग द्वारा सीधे उपयोग करना चाहते myStaticFieldया myStaticMethodहर बार लिखे बिना MyClass.myStaticFieldया MyClass.myStaticMethod

नोट: आपको अन्य संसाधनों तक पहुँचने के लिए import myPackage.MyClass या करने की आवश्यकता है myPackage.*


1

इसके staticबाद importका संशोधक किसी वर्ग के स्थिर क्षेत्रों को प्राप्त करने / उपयोग करने के लिए है। एक क्षेत्र जिसमें मैं उपयोग करता हूं import staticवह एक वर्ग से स्थिरांक प्राप्त करने के लिए है। हम import staticस्थैतिक तरीकों पर भी आवेदन कर सकते हैं । टाइप करना सुनिश्चित करें import staticक्योंकि static importगलत है।

static importजावा में क्या है - JavaRevisited - इसके बारे में अधिक जानने के लिए एक बहुत अच्छा संसाधनimport static

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.