2011-09-25 5 views
8

में तर्क के रूप में इसे पास करते समय सरणी बनाना एक निर्माता या विधि के हिस्से के रूप में ऑब्जेक्ट्स की सरणी बनाने का कोई तरीका है? मुझे सच में यकीन नहीं है कि यह कैसे शब्द है, इसलिए मैंने एक उदाहरण शामिल किया है। मेरे पास एक enum है, और खेतों में से एक संख्याओं की एक सरणी है। यहां मैंने कोशिश की है:जावा

public enum KeyboardStuff { 

    QWERTY(1, {0.5f, 1.3f, 23.1f}, 6); 
    DVORAK(5, {0.1f, 0.2f, 4.3f, 1.1f}, 91); 
    CHEROKEE(2, {22.0f}, 11); 

    private int number, thingy; 
    private float[] theArray; 

    private KeyboardStuff(int i, float[] anArray, int j) { 
     // do things 
    } 

} 

कंपाइलर का कहना है कि ब्रैकेट {} अमान्य हैं और उन्हें हटाया जाना चाहिए। क्या कोई तरीका है कि मैं पहले से ऑब्जेक्ट्स बनाने के बिना एक सरणी को तर्क के रूप में पास कर सकता हूं?

उत्तर

26

आप new float[] { ... } के साथ प्रयास कर सकते हैं।

public enum KeyboardStuff { 

    QWERTY(1, new float[] {0.5f, 1.3f, 23.1f}, 6); 
    DVORAK(5, new float[] {0.1f, 0.2f, 4.3f, 1.1f}, 91); 
    CHEROKEE(2, new float[] {22.0f}, 11); 

    private int number, thingy; 
    private float[] theArray; 

    private KeyboardStuff(int i, float[] anArray, int j) { 
     // do things 
    } 

} 
+0

मुझे नहीं पता था यह संभव था, बहुत बहुत धन्यवाद! – Tanaki

2

क्या कोई तरीका है कि आप सरणी बनाये बिना सरणी पास कर सकते हैं?

नहीं, लेकिन आप इसे अधिकतर अदृश्य बनाने के लिए varargs का उपयोग कर सकते हैं, हालांकि int अंत में स्थानांतरित करने की आवश्यकता हो सकती है।

4

@ डेव के बाद सुझाव है मैं एक vararg

QWERTY(1, 6, 0.5, 1.3, 23.1); 
DVORAK(5, 91, 0.1, 0.2, 4.3, 1.1); 
CHEROKEE(2, 11, 22.0); 

private final int number, thingy; 
private final double[] theArray; 

private KeyboardStuff(int number, int thingy, double... theArray) { 
    // do things 
} 

यह बहुत दुर्लभ है कि एक float का उपयोग कर एक double का उपयोग कर से बेहतर है का प्रयोग करेंगे। डबल में कम गोलाकार त्रुटि होती है और केवल 4 और बाइट्स का उपयोग करती है।

+0

@ डेव भी, मैं लगभग इस बारे में भूल गया। इस समाधान के लिए धन्यवाद, लेकिन मुझे एक से अधिक ऑब्जेक्ट [] पैरामीटर बनाने की आवश्यकता हो सकती है, इसलिए यह उस स्थिति में आदर्श नहीं होगा। – Tanaki

0

तो सूचियाँ सरणियों के बजाय का उपयोग करते हुए एक विकल्प है, जावा के भविष्य के संस्करणों के लिए एक 'collection literals' वाक्य रचना जो दुर्भाग्य से यह जावा 8 में बना दिया है प्रतीत नहीं होता समर्थन शुरू कर सकते हैं:

public enum KeyboardStuff { 

    QWERTY(1, [0.5f, 1.3f, 23.1f], 6); 
    DVORAK(5, [0.1f, 0.2f, 4.3f, 1.1f], 91); 
    CHEROKEE(2, [22.0f], 11); 

    private int number, thingy; 
    private List<Float> values; 

    private KeyboardStuff(int i, List<Float> values, int j) { 
     // do things 
    } 

} 
+0

ऐसा लगता है कि संग्रह शब्दशः इसे जावा 8 में दुर्भाग्य से नहीं बनाया गया था। – harperska