Digamos que eu tenha um código como:
import java.util.Date;
import my.own.Date;
class Test{
public static void main(String [] args){
// I want to choose my.own.Date here. How?
..
// I want to choose util.Date here. How ?
}
}
Devo ser nomes de classe totalmente qualificados? Posso me livrar das declarações de importação? Esse cenário é comum na programação do mundo real?
Respostas:
Você pode omitir as instruções de importação e se referir a elas usando o caminho inteiro. Por exemplo:
Mas eu diria que usar duas classes com o mesmo nome e uma função semelhante geralmente não é a melhor ideia, a menos que você possa deixar bem claro qual é qual.
fonte
your.own.Date
usando ctrl + shift + R. Isso irá alterá-lo automaticamente em todos os lugares em que você se referir a ele em seu código, bem como no arquivo (e nome de arquivo) seu / own / Date.java. Qualquer outro IDE provavelmente tem um recurso semelhante.Date
é o nome perfeito. Você o usará na maior parte do seu código. No entanto, às vezes você precisará chamar ojava.util.Date
notavelmente para fazer conversões entre os dois.org.apache.log4j.Logger
ejava.util.logging.Logger
. Normalmente, não tenho controle sobre um lado ou outro; Estou fazendo integração de código legado.use o nome totalmente qualificado em vez de importar a classe.
por exemplo
fonte
Sim, ao importar classes com os mesmos nomes simples, você deve se referir a eles por seus nomes de classe totalmente qualificados. Eu deixaria as instruções de importação, pois dá a outros desenvolvedores uma ideia do que está no arquivo quando eles estão trabalhando com ele.
fonte
Outra maneira de fazer isso é criar uma subclasse:
Em seguida, importe my.own.FQNDate em pacotes que tenham java.util.Date.
fonte
Matchers
e o MockitoMatchers
na mesma classe. Parece funcionar com métodos estáticos..when
es,.thenReturn
s etc. - remove oMockito.
inchaço.Se você tiver sua própria classe de data, deverá distingui-la da classe de Data incorporada. ou seja, por que você criou o seu próprio. Algo como ImmutableDate ou BetterDate ou NanoDate, até mesmo MyDate indicaria por que você tem sua própria classe para encontros. Nesse caso, eles terão um nome exclusivo.
fonte
Você pode importar um deles usando importar. Para todas as outras classes semelhantes, você precisa especificar nomes de classe totalmente qualificados. Caso contrário, você obterá um erro de compilação.
Por exemplo:
fonte
Esse cenário não é tão comum na programação do mundo real, mas também não é tão estranho. Às vezes acontece que duas classes em pacotes diferentes têm o mesmo nome e precisamos de ambas.
Não é obrigatório que, se duas classes tiverem o mesmo nome, ambas conterão as mesmas funcionalidades e devemos escolher apenas uma delas.
Se precisarmos de ambos, não há mal nenhum em usar isso. E também não é uma má ideia de programação.
Mas devemos usar nomes totalmente qualificados das classes (que têm o mesmo nome) para deixar claro a qual classe estamos nos referindo também.
:)
fonte
Eu me deparo com esse problema quando, por exemplo, mapeio uma classe para outra (como ao mudar para um novo conjunto de classes para representar dados pessoais). Nesse ponto, você precisa das duas classes porque esse é o ponto principal do código - mapear uma para a outra. E você não pode renomear as classes em nenhum dos lugares (novamente, o trabalho é mapear, não mudar o que outra pessoa fez).
Totalmente qualificado é uma maneira. Parece que você não pode realmente incluir ambas as instruções de importação, porque Java se preocupa com o significado de "Pessoa", por exemplo.
fonte
Se você realmente deseja ou precisa usar o mesmo nome de classe de dois pacotes diferentes, você tem duas opções:
1-escolha um para usar na importação e use o nome de classe totalmente qualificado do outro:
2-sempre use o nome de classe totalmente qualificado:
fonte
Acabei de ter o mesmo problema, o que fiz, organizei a ordem da biblioteca em sequência, por exemplo havia java.lang.NullPointerException e javacard.lang.NullPointerException. Fiz a primeira como biblioteca padrão e se você precisar usar a outra, pode especificar explicitamente o nome de classe totalmente qualificado.
fonte
Ao chamar classes com os mesmos nomes, você deve especificar explicitamente o pacote do qual a classe é chamada.
Você pode fazer assim:
Resultado:
fonte