anfil89 Posted April 18, 2012 at 04:42 PM Report #449755 Posted April 18, 2012 at 04:42 PM Boas, Eu estou a tentar fazer um array de ArrayList mas não está a funcionar, sabem-me dizer porque? public static ArrayList<String>[] GRAFO = new ArrayList<String>()[N];
KTachyon Posted April 18, 2012 at 06:23 PM Report #449799 Posted April 18, 2012 at 06:23 PM Não utilizas genéricos com arrays. ArrayList[] GRAFO = new ArrayList[N]; “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
anfil89 Posted April 18, 2012 at 06:37 PM Author Report #449806 Posted April 18, 2012 at 06:37 PM Não utilizas genéricos com arrays. ArrayList[] GRAFO = new ArrayList[N]; Pois, eu fiz isso mas dava-me um warning, mas já resolvi, tem que colocar depois o seguinte: @SuppressWarnings("unchecked")
brunoais Posted April 19, 2012 at 09:17 AM Report #449887 Posted April 19, 2012 at 09:17 AM Pois, eu fiz isso mas dava-me um warning, mas já resolvi, tem que colocar depois o seguinte: @SuppressWarnings("unchecked") Resolver os warnings não é suprimindo-os, é resolvendo-os [sarcasm] Eu sei eu sei... fazer as coisas como deve ser dá trabalho e é uma chatice de todo o tamanho... [/sarcasm] mas os warnings têm sempre razão, por alguma razão eles existem e existem para evitar os erros. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
anfil89 Posted April 19, 2012 at 09:27 AM Author Report #449891 Posted April 19, 2012 at 09:27 AM Resolver os warnings não é suprimindo-os, é resolvendo-os [sarcasm] Eu sei eu sei... fazer as coisas como deve ser dá trabalho e é uma chatice de todo o tamanho... [/sarcasm] mas os warnings têm sempre razão, por alguma razão eles existem e existem para evitar os erros. O problema é que não sei como resolve-lo xD De qualquer maneira obrigado. Topic solved.
brunoais Posted April 19, 2012 at 10:56 AM Report #449914 Posted April 19, 2012 at 10:56 AM O problema é que não sei como resolve-lo xD Podias ter dito: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
joseerodrigues Posted April 19, 2012 at 11:15 AM Report #449921 Posted April 19, 2012 at 11:15 AM Há alturas em que não dá mesmo para fugir aos warnings... e uns são mais graves que outros: ArrayList[] GRAFO = new ArrayList[N]; Aqui não defines o tipo do arrayList, todas as tuas operações serão sobre o Object e não String. Obrigas o código que utiliza essa variavel a "saber" qual o tipo associado (neste caso String é o que pretendes). Esse código, pelo menos na minha máquina não gera warnings, mas considero-o mais "perigoso" do que a alternativa (ainda que com warnings). O que gera warnings efectivamente: ArrayList<String>[] grafo = new ArrayList[2]; // warning: [unchecked] unchecked conversion ArrayList<String>[] grafo2 = (ArrayList<String>[]) Array.newInstance(ArrayList.class, 2); // warning: [unchecked] unchecked cast Ainda assim, o warning diz respeito apenas ao assignment, o código que usar qualquer uma das variaveis já vai ser obrigado a respeitar o tipo definido ArrayList<String>[], pelo menos em compile-time e se tiveres algum cuidado, pois como não podes efectivamente declarar arrays com tipos genéricos, internamente terás sempre ArrayList[], como tal, arriscas-te a erros de runtime se não fores cuidadoso. por exemplo: ArrayList<String>[] grafo2 = (ArrayList<String>[]) Array.newInstance(ArrayList.class, 1); //warning: [unchecked] unchecked cast ArrayList b[] = grafo2; b[0] = new ArrayList<Long>(); b[0].add(new Long(2)); // warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.ArrayList for (ArrayList<String> as : grafo2){ for (String s : as){ System.out.println(s); } } Compila com os warnings descritos, mas em runtime : java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String. Ok, o que fazer entao? Na minha opinião, deve ser feito um uso muito cuidadoso da anotação SuppressWarnings, limitando o seu scope ao máximo, neste caso á inicialização do array: @SuppressWarnings("unchecked") ArrayList<String>[] grafo2 = (ArrayList<String>[]) Array.newInstance(ArrayList.class, 1); grafo2[0] = new ArrayList<String>(); // no warnings, como seria de esperar. grafo2[0].add("asdasd"); // no warnings ArrayList b[] = grafo2; b[0] = new ArrayList<Long>(); // apenas um warning, e este sim é grave. já te dá a entender que estás a fazer algo que não devias, // pois se estivesses a usar a var grafo2 (q é parameterizada) não terias warnings nenhums. // e sabes que pode dar origem a runtime exceptions. que é o caso. b[0].add(new Long(2)); // warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.ArrayList for (ArrayList<String> as : grafo2){ for (String s : as){ System.out.println(s); } } Espero ter servido de alguma ajuda. Cumprimentos, José Rodrigues
brunoais Posted April 19, 2012 at 11:55 AM Report #449935 Posted April 19, 2012 at 11:55 AM ... Wow what?!?!? Então isto não funciona sem warnings? ArrayList<String>[] arrayAlist = new ArrayList[15]; arrayAlist[0] = new ArrayList<String>(); "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
joseerodrigues Posted April 19, 2012 at 12:03 PM Report #449936 Posted April 19, 2012 at 12:03 PM Wow what?!?!? Então isto não funciona sem warnings? ArrayList<String>[] arrayAlist = new ArrayList[15]; arrayAlist[0] = new ArrayList<String>(); Por aqui dá o mesmo que tinha colocado no post : ArrayList<String>[] grafo = new ArrayList[2]; // warning: [unchecked] unchecked conversion ArrayList<String>[] grafo2 = (ArrayList<String>[]) Array.newInstance(ArrayList.class, 2); // warning: [unchecked] unchecked cast warning: [unchecked] unchecked conversion found : java.util.ArrayList[] required: java.util.ArrayList<java.lang.String>[] ArrayList<String>[] arrayAlist = new ArrayList[15]; Cumprimentos, José Rodrigues
AngusYoung Posted April 19, 2012 at 01:23 PM Report #449970 Posted April 19, 2012 at 01:23 PM Arrayception! 😛 Desculpem, mas tinha mesmo de dizer isto. Isto porque, saber a composicão do granito, os estágios da evolucão psicológica humana ou as deambulacões do Sartre não indicam puto sobre as competências de alguém num determinado campo específico e muito menos sobre o que as pessoas gostam de fazer ou a sua capacidade de aprendizagem. - bubulindo, 15 de Fevereiro de 2013 - 02:01
brunoais Posted April 19, 2012 at 02:42 PM Report #449987 Posted April 19, 2012 at 02:42 PM @joseerodrigues Oh... Já percebi, é um bug do java6. Já nem me lembrava. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now