resueltos - ¿Cómo crear una instancia de una matriz de Java dado un tipo de matriz en tiempo de ejecución?
matriz java filas columnas (4)
En el marco de colecciones de Java, la interfaz de Colección declara el siguiente método:
Devuelve una matriz que contiene todos los elementos de esta colección; el tipo de tiempo de ejecución de la matriz devuelta es el de la matriz especificada. Si la colección se ajusta a la matriz especificada, se devuelve allí. De lo contrario, se asigna una nueva matriz con el tipo de tiempo de ejecución de la matriz especificada y el tamaño de esta colección.
Si quisiera implementar este método, ¿cómo crearía una matriz del tipo de a , conocida solo en tiempo de ejecución?
Al ver cómo lo hace ArrayList:
public <T> T[] toArray(T[] a) {
if (a.length < size)
a = (T[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size);
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
Para crear una nueva matriz de un tipo genérico (que solo se conoce en tiempo de ejecución), debe crear una matriz de Objetos y simplemente convertirla en el tipo genérico y luego usarla como tal. Esta es una limitación de la implementación de genéricos de Java (borrado).
T[] newArray = (T[]) new Object[X]; // where X is the number of elements you want.
La función toma la matriz dada (a) y la usa (verificando su tamaño de antemano) o crea una nueva.
Usa el método estático
java.lang.reflect.Array.newInstance(Class<?> componentType, int length)
Un tutorial sobre su uso se puede encontrar aquí: http://java.sun.com/docs/books/tutorial/reflect/special/arrayInstance.html
Array.newInstance(Class componentType, int length)