2011-09-25 16 views
8

C'è un modo per creare un array di oggetti come parte di un costruttore o di un metodo? Non sono davvero sicuro di come farlo, quindi ho incluso un esempio. Ho un enum e uno dei campi è una serie di numeri. Ecco quello che ho provato:Creazione di un array durante il passaggio come argomento in 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 
    } 

} 

Il compilatore dice che le parentesi {} non sono validi e devono essere rimossi. C'è un modo in cui posso passare un array come argomento senza creare prima una matrice di oggetti?

risposta

26

Puoi provare con 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

non sapevo questo è stato possibile, grazie mille! – Tanaki

2

C'è un modo per passare un array senza creare un array?

No, ma è possibile utilizzare varargs per renderlo quasi invisibile, anche se potrebbe essere necessario spostare lo int alla fine.

4

seguito @ Dave suggeriscono che userei un 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 
} 

E 'piuttosto raro che l'utilizzo di un float è migliore rispetto all'utilizzo di un double. il doppio ha meno errori di arrotondamento e utilizza solo altri 4 byte.

+0

Anche @Dave, mi sono quasi dimenticato di questo. Grazie per questa soluzione, ma potrei aver bisogno di creare più di un parametro Object [], quindi non sarebbe l'ideale in quella situazione. – Tanaki

0

Se utilizzando gli elenchi di invece di array è un'opzione, le future versioni di Java potrebbero iniziare a sostenere un 'collection literals' sintassi che purtroppo non sembra aver fatto in 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

Sembra che i letterali di raccolta non siano stati inclusi in Java 8, sfortunatamente. – harperska

Problemi correlati