Uma das mudanças do Tiger que eu não coloquei nos slides da minha palestra no BrasilOne é o suporte a covariância. O que é isso?
Basicamente, no escopo do Tiger, isso se refere ao fato de um método poder sobrescrever outro retornando uma subclasse do tipo de retorno do método original. Algo assim:
public interface Product { //... } public abstract class Factory { public abstract Product create(); //... } public class ConcreteProduct implements Product { //... } public class ConcreteFactory extends Factory { public ConcreteProduct create() { //... } //... }
O exemplo de covariância é o método create()
. A “graça” de ter covariância é que você elimina os casts quando está acessando o tipo concreto diretamente, o que seria muito bom pra quando você tem uma família de interfaces sendo implementadas todas juntas por um conjunto de classes concretas que são dependentes entre si. O código fica muito mais “limpo” do que é hoje.