Atraso / Latência? Eu chamo BS por isso. Deve haver exatamente zero sobrecarga nessa prática. ( Editar: foi apontado nos comentários que isso pode, de fato, inibir as otimizações realizadas pela VM do HotSpot. Não sei o suficiente sobre a implementação da VM para confirmar ou negar isso. Eu estava baseando meu comentário no C ++ implementação de funções virtuais.)
Há algum código adicional. Você precisa criar todos os construtores da classe base que desejar, encaminhando seus parâmetros.
Eu também não vejo isso como um antipadrão, por si só. No entanto, eu vejo isso como uma oportunidade perdida. Em vez de criar uma classe que deriva a classe base apenas para renomear, que tal criar uma classe que contenha a coleção e ofereça uma interface aprimorada, específica para cada caso? O cache do widget deve realmente oferecer a interface completa de um mapa? Ou deveria oferecer uma interface especializada?
Além disso, no caso de coleções, o padrão simplesmente não funciona em conjunto com a regra geral de usar interfaces, não implementações - ou seja, no código de coleção simples, você cria um HashMap<String, Widget>
e atribui-o a uma variável do tipo Map<String, Widget>
. Você WidgetCache
não pode estender Map<String, Widget>
, porque essa é uma interface. Não pode ser uma interface que estenda a interface base, porque HashMap<String, Widget>
não implementa essa interface e nenhuma outra coleção padrão. E embora você possa torná-la uma classe que se estende HashMap<String, Widget>
, você deve declarar as variáveis como WidgetCache
or Map<String, Widget>
e a primeira perde a flexibilidade de substituir uma coleção diferente (talvez uma coleção de carregamento lento do ORM), enquanto a segunda derrota o ponto de ter a aula.
Alguns desses contrapontos também se aplicam à minha classe especializada proposta.
Estes são todos os pontos a considerar. Pode ou não ser a escolha certa. Nos dois casos, os argumentos oferecidos pelo seu colega não são válidos. Se ele acha que é um antipadrão, deve nomear.