2011-09-25 82 views
8

有沒有辦法創建一個對象數組作爲構造函數或方法的一部分?我真的不知道該怎麼說,所以我列舉了一個例子。我有一個枚舉,其中一個字段是一組數字。這是我試過的:創建一個數組,並將其作爲參數傳遞給Java

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

繼@戴夫的建議,我會用一個可變參數

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更好。 double具有更少的舍入錯誤並且只使用4個字節。

+0

@Dave,我差點忘了這個。感謝您使用此解決方案,但我可能需要創建多個Object []參數,因此在這種情況下這並不理想。 – Tanaki

0

如果使用列表的數組,而不是一個選項,Java的未來版本可能會開始支持「collection literals」語法,遺憾的是似乎並沒有使它成爲Java的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

不幸的是,它看起來像集合文字沒有變成Java 8。 – harperska

相關問題