MaxMustang,
Acho que voce está equivocado, no seguinte aspecto e acredito que o motivo disso é que acho que voce começou a estudar Java depois da versão 5.0, onde foi lançando suporte a "Generics".
Vamos ao questionamento:
[quote=maxmustang]mesmo assim… se ele fizer
List lista = new ArrayList();
ele ainda preciza passar o tipo da List nao??
Errado…O "tipo" da lista que acredito que voce esteja falando, seja exatamente a questão do Generics, nada impede que eu crie uma Collection "não tipada", porém irei perder as features que a interface me asseguraria (geralmente no caso de um ArrayList, a utilização de for each sem o cast).
[code]import java.util.ArrayList;
import java.util.List;
public class ListTestDrive {
public static void main(String[] args) {
List myList = new ArrayList();
}
}[/code]
se ele fizer só o List myLsit = new ArrayList();
nem funciona [/quote]
Claro que funciona… pode testar, a única coisa que irá acontecer de "anormal", seria o raise de um warning informando que o tipo List<> não é genérico, mas funcionar funciona SIM (vide Spring, EJB, etc.).
Vamos pensar assim, Spring…basicamente como ele funciona:
- Voce cria uma interface que define métodos;
- implementa em "x" classes diferentes (se voce for implementar em apenas uma classe a interface perde o sentido com relação ao reuso - não vou entrar agora em detalhes de baixo e alto aclopamentos);
- através de arquivos de configuração, voce fala pro Spring : "Spring meu camarada, quando a classe X for instanciada, injeta a classe Y" . Porém quando voce olha o código dessa classe Y, ela tem UMA INTERFACE.
Mas ué…INTERFACE nao é objeto, como ela executa os métodos ?
Quando voce trabalha com alguma framework de DI, o mecanismo basicamente funciona da mesma forma.
1 - Cria uma interface;
2 - implementa ela em any classes;
3 - Especifica qual classe (implementação) deverá ser injetada pelo container em determinadas classes;
4- quando a determinada classe é instanciada, a mesma recebe a injeção de dependência da IMPLEMENTAÇÃO da interface, e então, voce poderá usufruir da mesma, mas o segredo esta na interface;
Dica: 8)
- É sempre bom utilizar o tipo mais Genérico (facilita alterações);
- Programe sempre pensando em interfaces;
- não sei se os exemplo foram claros, me desculpe mas não consigo pensar em algo melhor do que o Spring;