2011-04-24 6 views
37

क्या कोई तरीका है कि हम किसी अन्य नाम के तहत कक्षा आयात कर सकते हैं? जैसे कि मेरे पास javax.C नामक एक वर्ग है और java.C नामक एक और वर्ग है, मैं c1 नाम के तहत javax.C आयात कर सकता हूं और c2 नाम के तहत java.C आयात कर सकता हूं।जावा, क्या कोई तरीका है कि हम किसी अन्य नाम के तहत कक्षा आयात कर सकते हैं

हम सी # में कुछ इस तरह कर सकते हैं:

using Sys=System; 

या VB:

Imports Sys=System 
+0

आप स्काला में ऐसा कर सकते हैं प्रयोग किया जाता है इस तरह:।। आयात java.util {ArrayList => JavaList} – bartektartanus

उत्तर

41

नहीं, कि जावा में ऐसा कुछ नहीं है। आप केवल अपने मूल नाम के तहत कक्षाएं आयात कर सकते हैं, और उन सभी के लिए पूरी तरह से योग्य नाम का उपयोग करना है जिन्हें आप आयात नहीं करते हैं (java.lang और वर्तमान वर्ग के पैकेज में छोड़कर)।

4

छोटा होने के लिए, नहीं, जावा में यह संभव नहीं है।

2

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

यदि कोई नई अवधारणा वास्तव में एक नए नाम का हकदार है, तो संभवतः यह एक नए प्रकार के हकदार भी है।

Sys=System का उपयोग उदाहरण अधिकांश जावा देवों द्वारा फेंक दिया जाएगा।

+7

वास्तव में है कि बस एक है उदाहरण के लिए। एक बेहतर उपयोग केस क्लैशिंग नामों के साथ कक्षाओं का आयात करेगा (यह हर समय होगा) – Pacerier

+1

@ जावासर नाम संघर्ष जावा में बहुत आम नहीं है। और जब ऐसा होता है, पैकेज नाम के साथ पूर्ण श्रेणी का नाम उपयोग करें, जिसका पु रस्सी विशेष रूप से नाम संघर्ष को हल करने के लिए है। – irreputable

+5

मुझे विश्वास नहीं है कि संकुल का उद्देश्य विशेष रूप से नाम संघर्ष को हल करने के लिए है। पैकेज तार्किक रूप से चीजों को समूहीकृत करने के लिए हैं। नाम टकराव ओओपी में "अपेक्षित" है, और यही कारण है कि हमारे पास संकुल/नामस्थान – Pacerier

4

आप सभी मामलों में ऐसा कर सकते हैं नहीं है, क्योंकि कुछ अंतिम कक्षाएं हैं, लेकिन आप वर्ग

class RenameTest { 

    private static class MyRenamedClass extends ClassToRename { } 


    MyRenamedClass renamed = new ClassToRename("lol, the class was renamed"); 

    void foo() { 
     renamed.originalFoo(); // because MyRenamedClass doesn't override any 
           // methods, it always defaults to the parent class 
    } 
} 
+13

मैं यह स्पष्ट करना चाहता हूं कि मुझे वास्तव में यह अच्छा नहीं लगता विचार। बस यह कह रहा है कि यह संभव है। – corsiKa

+10

+1 "लॉल के लिए, कक्षा का नाम बदल दिया गया था" – Pacerier

+0

वास्तव में वही बात नहीं है। उदाहरण के लिए, यदि 'RenameTest'' MyRenamedClass' प्रकार के पैरामीटर के साथ एक सार्वजनिक विधि बनाता है, और कोई अन्य क्लास उस विधि को 'ClassToRename' के उदाहरण के साथ कॉल करने का प्रयास करती है, तो परिणाम संकलित त्रुटि होगी। क्लासटोननाम के * स्थिर * एस तक पहुंचने में भी मदद नहीं करता है। लेकिन फिर आपने यह नहीं कहा कि यह एक अच्छा विचार था; बस इतना सबूत जोड़ना कि यह नहीं है। – ToolmakerSteve

0

जावा स्थिर नाम का समर्थन नहीं करता विस्तार करने के लिए सक्षम हो सकता है। एक विचार है कि किसी नए वर्गनाम के साथ प्रश्न में ऑब्जेक्ट को उपclass करना है (लेकिन कुछ साइड इफेक्ट्स/सीमाओं के कारण एक अच्छा विचार नहीं हो सकता है, उदाहरण के लिए आपके लक्षित वर्ग में अंतिम संशोधक हो सकता है। अगर स्पष्ट प्रकार की जांच हो तो कोड को अलग-अलग व्यवहार किया जा सकता है getClass() या , आदि (नीचे एक अलग जवाब से अनुकूलित उदाहरण)

class MyApp { 

    public static void main(String[] args) { 
    ClassToRename parent_obj = new ClassToRename("Original class"); 
    MyRenamedClass extended_obj_class_renamed = new MyRenamedClass("lol, the class was renamed"); 
    // these two calls may be treated as the same 
    // * under certain conditions only * 
    parent_obj.originalFoo(); 
    extended_obj_class_renamed.originalFoo(); 
    } 

    private static class ClassToRename { 
    public ClassToRename(String strvar) {/*...*/} 
    public void originalFoo() {/*...*/} 
    } 

    private static class MyRenamedClass extends ClassToRename { 
    public MyRenamedClass(String strvar) {super(strvar);} 
    } 

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