2011-09-25 13 views
8

¿Hay alguna forma de crear una matriz de objetos como parte de un constructor o método? Realmente no estoy seguro de cómo decir esto, así que he incluido un ejemplo. Tengo una enumeración, y uno de los campos es una matriz de números. Esto es lo que probé:Crear una matriz al pasarla como argumento en 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 
    } 

} 

El compilador dice que los corchetes {} no son válidos y deben eliminarse. ¿Hay alguna manera de que pueda pasar una matriz como argumento sin crear una matriz de objetos de antemano?

Respuesta

26

Puedes probar 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

no sabía esto fue posible, ¡muchas gracias! – Tanaki

2

¿Hay una manera que puede pasar un array sin crear una matriz?

No, pero podría usar varargs para que sea casi invisible, aunque podría ser necesario que int al final se mueva.

4

Siguiendo @ Dave sugieren que usaría 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 
} 

Es bastante raro que el uso de un float es mejor que usar un double. double tiene menos error de redondeo y solo usa 4 bytes más.

+0

@Dave también, casi me olvido de esto. Gracias por esta solución, pero es posible que necesite crear más de un parámetro Object [], por lo que no sería ideal en esa situación. – Tanaki

0

Si se utiliza de vez de matrices de listas es una opción, las futuras versiones de Java podrían empezar a apoyar un 'collection literals' sintaxis que, desgraciadamente, no parece haber hecho en 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

Parece que los literales de la colección tampoco llegaron a Java 8, desafortunadamente. – harperska

Cuestiones relacionadas