Quais são as razões pelas quais alguém usaria nomes de classe totalmente qualificados no código-fonte?

9

Recentemente, deparei com um código em que os desenvolvedores usavam nomes de classes totalmente qualificados E nomes de classes importados em seu código-fonte.

Exemplo:

import packageA.Foo;

public class Example {
    public packageB.Bar doSomething() {
        final Foo foo = new Foo();
        ...
    }
}

Fiquei com a impressão de que a única razão pela qual alguém pode querer usar nome completo para classes no código-fonte é quando elas têm nomes de classe idênticos em dois pacotes diferentes e precisam do nome completo para distinguir entre os dois. Estou errado?

c_maker
fonte

Respostas:

11

Não - você está certo. O uso de nomes de pacotes totalmente qualificados geralmente é considerado de estilo inadequado, exceto quando é necessário evitar colisões.

Se o nome de um pacote for especialmente curto e descritivo, o uso de identificadores qualificados poderá tornar o código mais expressivo. Mas o JLS prescreve nomes baseados em domínio para a maioria dos pacotes; portanto, os nomes dos pacotes geralmente não são curtos e descritivos.

Daniel Lubarov
fonte
Eu sempre usar o nome qualificado completo, pois evitar a colisão (como você disse)
Joe Taras
9

O outro motivo (exceto colisões) seria se você precisar de uma aula apenas uma vez. Isso é especialmente verdadeiro se a classe implementa uma interface comum e você só precisa do nome real da classe para instanciação. O uso do nome completo torna mais fácil reconhecer que uma classe incomum é usada aqui e onde encontrá-la (assumindo convenções de nomenclatura sensata).

List li = new com.foobar.veryspecial.MagicList();
user281377
fonte
Resposta intrigante. Eu gosto disso.
Brandon