AbelBueno:
juliocbq:
Sim, mal qual a vantagem de um em relação ao outro?.
Na verdade para algo simples assim, não faz muita diferença mesmo.
Quando você tem declarações mais complexas (Map de Map) ou aproveitar diretamente o retorno de uma função para definir o tipo, só digitar menos já começa a compensar.
Um exemplo mais prático é a possibilidade de tipos anônimos.
Em scala você pode fazer algo assim:
val objetoSemTipo = new Object() { def falaOi = println("oi") }
objetoSemTipo.falaOi
objetoSemTipo.falaOi
No Java, você não consegue chamar o método falaOi, sem definir uma classe para isso.
Aqui o var vai capturar que é uma classe anônima e dar acesso a todos os métodos que definir nela.
O .NET faz uso disso no Linq, se não me engano, para montar objetos com o resultado das queries.
eu entendi seu ponto de vista. mas há um problema implícito nisso.
vejamos!
ficaria assim:
a1 = SeuFactory.CreateObjfalaOi();
a1.falaOi;
correto?
imagine agora o código maior
a1 = SeuFactory.CreateObjfalaOi("ptbr");
a1.falaOi;
aI = SeuFactory.CreateObjfalaOi("eng");
a1.falaOi;
teve algum erro ai? o compilador perceberia?
no java hoje não teria esse risco. pq a sintaxe distingue mt bem o q é declaração do q é apenas uso.
ou seria:
TipoFala aI = SeuFactory.CreateObjfalaOi("eng");
ou seria:
a1 = SeuFactory.CreateObjfalaOi("eng");
mas eu concordo com vc q ajudaria se pudesse ter a tipagem na declaração implicita. tipo o with do pascal.
pq o with passa o contexto baseado no retorno e não na declaração.