¿Cómo crear una instancia de una matriz Java dado un tipo de matriz en tiempo de ejecución?

StackOverflow https://stackoverflow.com/questions/77387

  •  09-06-2019
  •  | 
  •  

Pregunta

En el marco de colecciones de Java, la interfaz Colección declara el siguiente método:

<T> T[] toArray(T[] a)

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 cabe en 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 quisieras implementar este método, ¿cómo crearías una matriz del tipo de a, conocido sólo en tiempo de ejecución?

¿Fue útil?

Solución

Utilice el método estático

java.lang.reflect.Array.newInstance(Class<?> componentType, int length)

Puede encontrar un tutorial sobre su uso aquí:http://java.sun.com/docs/books/tutorial/reflect/special/arrayInstance.html

Otros consejos

Observando 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;
}
Array.newInstance(Class componentType, int length)

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 al tipo genérico y luego usarla como tal.Esta es una limitación de la implementación genérica de Java (borrado).

T[] newArray = (T[]) new Object[X]; // where X is the number of elements you want.

Luego, la función toma la matriz dada (a) y la usa (verificando su tamaño de antemano) o crea una nueva.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top