Estava fazendo o mock do site da caelum e fiquei com uma dúvida.
Veja a pergunta:
1 Collection c1 = new ArrayList();
2 Collection c2 = new ArrayList();
3 Collection<?> c3 = new ArrayList();
4 Collection c4 = new ArrayList();
5 Collection c5 = new ArrayList();
Quais linha não compilaram?
Nenhuma, todas compilam sem problemas.
Apenas as linhas 1,3,4,5.
Apenas as linhas 3,4,5.
Apenas as linhas 1,2.
Apenas as linhas 1,4,5
No mock a resposta certa é “Apenas as linhas 1,4,5”.
Copie o código e colei no eclipse para testar.
As únicas que não compilaram foram a 1 e 4.
o mock está errado?
Pela lógica parece que a linha 5 não deveria compilar mesmo. Pois é como se eu estivesse atribuindo Collection c5 = new ArrayList(); não é?
A 5 compila mas dá um warning (ou seja, a linha compila e o código é gerado, mas uma mensagem é apresentada).
Portanto o mock está um pouco confuso.
Eu diria que esse tipo de sutileza (diferenciar entre um erro e um warning) seria explicado melhor na prova: ele perguntaria se a linha tem erros ou warnings, não se tem problemas (poderia ter o “problema” de usar nome de variável curto )
Aqui eu dou um exemplo do que pode ocorrer se você deixar passar em branco o warning da linha 5.
Mas repito: warning não é erro.
import java.util.*;
/**
* Classe legada, que não posso converter para generics, mas tenho de usar
*/
class ClasseLegada {
private List nomes;
public ClasseLegada () {
nomes = new ArrayList();
nomes.add ("Maria Madalena");
nomes.add ("João Evangelista");
}
/** Fui compilado em JDK 1.4 e prometo retornar uma lista de Strings. */
public List getNomes() {
return nomes;
}
}
class TesteGenerics {
public static void main(String[] args) {
ClasseLegada cl = new ClasseLegada();
/*5*/ Collection<String> c5 = cl.getNomes(); // warning: [unchecked] unchecked conversion
c5.add ("abraxas"); // ok - generics funcionando
// c5.add (new Object()); // não deixa fazer - dá erro de compilação - generics funcionando
cl.getNomes().add (new Object()); // é a mesma coisa, mas não dá erro de compilação.
// dá o warning "[unchecked] unchecked call to add(E) as a member of the raw type java.util.List"
// é por isso que ocorre o tal warning, porque isso abre "um buraco" nos testes de generics.
System.out.println (c5); // vai imprimir: [Maria Madalena, João Evangelista, abraxas, java.lang.Object@82ba41]
// ou seja, não é mais uma Collection<String>
}
}
[quote=marcelo_mococa]Instituto Tecnológico da Aeronáutica
[/quote]
Que eu saiba o nome é Instituto Tecnológico de Aeronáutica. Confirme isso em http://www.ita.br.
Note a diferença semântica: “da” quer dizer que é da (Força Armada) Aeronáutica; “de” quer dizer que é de (Tecnologia) Aeronáutica.
Se fosse “da” Aeronáutica, então você precisaria obrigatoriamente ser militar para concluir o curso (era preciso sê-lo para iniciar o curso, depois você passa para a reserva no 3o. ano).