Este artigo analisa o método de alteração da lista e matriz em Java. Compartilhe para todos para sua referência. Os detalhes são os seguintes:
Hoje, escrevi o código para encontrar um problema estranho. do seguinte modo:
ArrayList <String> List = new ArrayList <String> ();
Eu acho que não deve haver problema em escrever código dessa maneira e não há compilação de problemas. No entanto, quando a operação específica está em execução, o relatório é anormal, como segue: Exceção no thread "main" java.lang.classCastException: [ljava.lang.object;
Mas não há problema em escrever assim:
ArrayList <String> List = novo ArrayList <String> (); list.get (i);}
Podemos explicar esse fenômeno: o Java permite a transformação para cima e para baixo, mas se essa transformação é bem -sucedida com base no tipo desse objeto na máquina virtual Java. A máquina virtual Java salva o tipo de cada objeto. A matriz também é um objeto. O tipo de matriz [ljava.lang.Object. A conversão [ljava.lang.Object em [ljava.lang.string é obviamente impossível, porque essa é uma transformação descendente, e a máquina virtual preserva apenas que essa é uma matriz de objetos. Na matriz está o elemento é o elemento na matriz. Os elementos da matriz são apenas as referências do elemento, não o elemento específico do armazenamento; portanto, o tipo de elemento na matriz ainda é armazenado na máquina virtual Java.
De acordo com a explicação acima, podemos resumir esse problema para o seguinte modelo:
Objeto objs [] = novo objeto [10];
É o mesmo que a compilação acima. Se modificarmos este código, como segue:
String strs [] = new string [10];
Isso pode ser compilado e passado. Portanto, podemos atribuir esse problema a um problema de uma regra de transformação Java. Vamos falar sobre o apoio da matriz Java no modelo.
O JDK5 já possui suporte para tipos de modelos, que podem garantir a segurança dos tipos de dados na coleção e no mapa. Pessoalmente, devo devolver o t [] correspondente de acordo com o modelo. Veja mais de perto o código -fonte do JDK e encontre essa lista tem duas maneiras de se transformar em matriz:
objeto público [] ToArray ();
Este método retorna todos os elementos na lista para uma matriz do mesmo tamanho, e todos os elementos da matriz são do tipo de objeto.
public <T> t [] ToArray (t [] a);
Este método retorna todos os elementos na lista para uma matriz do mesmo tamanho, e todos os elementos da matriz são do tipo t.
A lista foi projetada porque o compilador Java não nos permite ter novas matrizes de modelos. Ou seja, você não pode definir uma matriz como esta:
T arr = novo t [tamanho];
Mas você pode usar t [] para representar a matriz e converter a matriz em t []. Por exemplo, o público <t> t [] ToArray (t [] a) na lista é realizado:
public <t> t [] ToArray (t [] a) {if (a.Length <size) a = (t []) java.lang.reflect.array.newinstance (a.getclass (). getComponentType (), GetComponentType (), tamanho);
Pode ser visto no código acima que, como você não conhece o tipo dessa matriz, você deve criar essa matriz através do mecanismo de reflexão (A.GetClass (). GetComponentType () para obter um tipo de elemento de matriz).
No final, a lista se converte em matriz para lidar com isso ::
ArrayList <String> List = novo ArrayList <String> ();
Por outro lado, e se você quiser transformar a matriz em lista? do seguinte modo:
String [] s = {"a", "b", "c"};
Espera -se que este artigo seja útil para o design do programa Java de todos.