java - tamaño - Array de sintaxis de inicialización cuando no está en una declaración
que es un array en programacion (4)
¿Por qué esto está bloqueado por Java?
Tendría que preguntarle a los diseñadores de Java. Puede haber alguna razón gramatical sutil para la restricción. Tenga en cuenta que algunas de las construcciones de creación / inicialización de matrices no estaban en Java 1.0, y (IIRC) se agregaron en Java 1.1.
Pero "por qué" es inmaterial ... la restricción está ahí, y tienes que vivir con eso.
Sé cómo evitarlo, pero de vez en cuando sería más simple.
Puedes escribir esto:
AClass[] array;
...
array = new AClass[]{object1, object2};
Puedo escribir:
AClass[] array = {object1, object2}
También puedo escribir:
AClass[] array = new AClass[2];
...
array[0] = object1;
array[1] = object2;
pero no puedo escribir
AClass[] array;
...
array = {object1, object2};
¿Por qué esto está bloqueado por Java?
Sé cómo evitarlo, pero de vez en cuando sería más simple.
Por ejemplo:
public void selectedPointsToMove(cpVect coord) {
if (tab == null) {
if (arePointsClose(coord, point1, 10)) {
cpVect[] tempTab = {point1};
tab = tempTab;
} else if (arePointsClose(point2, coord, 10)) {
cpVect[] tempTab = {point2};
tab = tempTab;
} else {
cpVect[] tempTab = {point1,point2};
tab = tempTab;
}
}
}
Esta simple pregunta me ha estado molestando desde que aprendí a jugar con matrices en Java.
No puedo responder la parte del por qué.
Pero si quiere algo dinámico, ¿por qué no considera Collection ArrayList?
ArrrayList puede ser de cualquier tipo de objeto.
Y si como compulsión lo quieres como una matriz, puedes usar el método toArray () en ella.
Por ejemplo:
ArrayList<String> al = new ArrayList<String>();
al.add("one");
al.add("two");
String[] strArray = (String[]) al.toArray(new String[0]);
Espero que esto te pueda ayudar.
Para aquellos de ustedes que no les gusta esta monstruosa new AClass[] { ... }
, aquí hay un poco de azúcar:
public AClass[] c(AClass... arr) { return arr; }
Use esta pequeña función como quiera:
AClass[] array;
...
array = c(object1, object2);
Trataré de responder la pregunta por qué: la matriz de Java es muy simple y rudimentaria en comparación con clases como ArrayList, que son más dinámicas. Java quiere saber en el momento de la declaración cuánta memoria debe asignarse para la matriz. Un ArrayList es mucho más dinámico y el tamaño del mismo puede variar con el tiempo.
Si inicializas tu matriz con la longitud de dos, y luego resulta que necesitas una longitud de tres, debes descartar lo que tienes y crear una matriz completamente nueva. Por lo tanto, la palabra clave ''nueva''.
En los primeros dos ejemplos, le dice a la hora de la declaración cuánta memoria asignar. En su tercer ejemplo, el nombre de la matriz se convierte en un puntero a nada en absoluto, y por lo tanto, cuando se inicializa, debe crear explícitamente una nueva matriz para asignar la cantidad correcta de memoria.
Diría eso (y si alguien sabe mejor, por favor corrígeme) el primer ejemplo
AClass[] array = {object1, object2}
en realidad significa
AClass[] array = new AClass[]{object1, object2};
pero lo que los diseñadores de Java hicieron fue crear una forma más rápida de escribirlo si creas la matriz en el momento de la declaración.
Las soluciones sugeridas son buenas. Si el tiempo o el uso de memoria es crítico en el tiempo de ejecución, use matrices. Si no es crítico, y quiere un código que sea más fácil de entender y trabajar, use ArrayList.