Essa é a resposta certa e, para isso, apenas acrescentaria o que você sugeriu: não, não existe uma sintaxe de alias em Java.
Sean Owen
19
Isso ainda é uma limitação no Java 8?
HairOfTheDog
8
@HairOfTheDog Não, infelizmente não aliasing importação foram adicionados em Java8
AdrieanKhisbe
12
Sim, eu concordo com o seu comentário linuxdan ... Java seguiu o caminho do dinossauro em termos de atualizações de sua sintaxe.
Kevin Parker
6
@Bozho A maneira python faz: import [fully-qualified-name] as [ident]. O “como” palavra-chave não parecem se encaixar em Java, bem como, uma alternativa é aproximadamente o que C # usos: import [ident] = [fully-qualified-name].
21715 Daniel Daniel H
60
Como as outras respostas já indicadas, Java não fornece esse recurso.
Este não é um pedido irracional, embora dificilmente essencial. O uso ocasional de nomes totalmente qualificados não é um fardo indevido (a menos que a biblioteca realmente reutilize os mesmos nomes simples, à direita e à esquerda, o que é um estilo ruim).
De qualquer forma, não ultrapassa os limites de preço / desempenho para uma alteração de idioma.
Então, acho que não veremos esse recurso em Java tão cedo :-P
Uau! você não estava brincando sobre "não (...) tão cedo", vejo que o pedido de recurso foi descartado como açúcar inútil já em 1998! E todas as tentativas de reabrir a discussão nos últimos 18 anos se perderam em uma referência a essa decisão antiga. Eu acho que seria mais fácil convencer os desenvolvedores de IDE a implementar isso como uma máscara no editor do que tentar acertar o Oracle.
Superole 28/09/16
2
O antigo raciocínio está correto - na prática, esses confrontos raramente ocorrem.
magro
14
Não concordo que esses confrontos raramente ocorram. A orientação a objetos favorece a nomeação simples. Eu posso ter uma classe Employee de duas bibliotecas diferentes que separam as coisas com um empregado (por exemplo).
Andrei Epure 23/03
6
@slim " na prática esses confrontos raramente ocorrem ". Não está claro para mim por que estas situações iria ocorrer com menos freqüência em java (onde você pode ter 10.000+ classes) do que em outras línguas (onde você geralmente têm menos classes) que fazem suportar esta sintaxe "açúcar".
Alain Pannetier
21
Absolutamente incorreto. Estou diante de um cenário muito simples que provavelmente é muito comum e onde esse açúcar sintático seria extremamente útil. Tradução entre modelos de objetos relacionados, mas distintos (usados em produtos relacionados, mas diferentes, respectivamente) cujas classes compartilham o mesmo nome na maioria das vezes. O processo de conversão requer que você consulte as duas classes no mesmo bloco de código. Nesse caso (que deve ser muito comum), Java torna a vida muito difícil. Apenas o número de visualizações nesta postagem deve contar a história.
Em Scala, é:import com.example.{Calendar => MyCalendar}
pablisco
24
E em Kotlin: import com.example.Calendar as MyCalendar.
KevinO
14
No PHP é: use com \ example \ Calendar como MyCalendar
até
19
É muito irritante ver que (pelo menos) 3 linguagens baseadas em JVM (Groovy, Scala & KOTLIN) têm esta característica, mas o próprio Java ainda não ...
Matthias
2
Que tal algo assim class MyCalendar extends com.example.Calendar {}? Não é ideal ou bonito, mas deve servir a muitos propósitos, exceto, digamos, reflexão. Você pode até anexá-lo com um comentário, se necessário, como /* import com.example.Calendar as MyCalendar */.
Braden Melhor
21
Java não permite que você faça isso. Você precisará se referir a uma das classes pelo nome completo e importar apenas a outra.
Dessa forma, você só precisa especificar o nome longo uma vez e pode ter quantas classes especialmente nomeadas desejar.
Outra coisa que eu gosto nesse padrão é que você pode nomear a classe de implementação da mesma forma que a classe base abstrata e apenas colocá-la em um espaço para nome diferente. Isso não está relacionado ao padrão de importação / renomeação.
Esta é uma solução muito ruim. Falha completamente ao lidar com estática, pode exigir atualizações constantes e não ajuda com problemas de des serialização (como desserialização do xml pelo jaxb).
Respostas:
Não há mecanismo de alias de importação em Java. Você não pode importar duas classes com o mesmo nome e usar as duas não qualificadas.
Importe uma classe e use o nome completo para a outra, ou seja,
fonte
import [fully-qualified-name] as [ident]
. O “como” palavra-chave não parecem se encaixar em Java, bem como, uma alternativa é aproximadamente o que C # usos:import [ident] = [fully-qualified-name]
.Como as outras respostas já indicadas, Java não fornece esse recurso.
A implementação desse recurso foi solicitada várias vezes, por exemplo, como JDK-4194542: aliasing do nome da classe ou JDK-4214789: Estenda a importação para permitir renomear o tipo importado .
Dos comentários:
Então, acho que não veremos esse recurso em Java tão cedo :-P
fonte
Provavelmente vale a pena notar que o Groovy possui esse recurso :
fonte
import com.example.{Calendar => MyCalendar}
import com.example.Calendar as MyCalendar
.class MyCalendar extends com.example.Calendar {}
? Não é ideal ou bonito, mas deve servir a muitos propósitos, exceto, digamos, reflexão. Você pode até anexá-lo com um comentário, se necessário, como/* import com.example.Calendar as MyCalendar */
.Java não permite que você faça isso. Você precisará se referir a uma das classes pelo nome completo e importar apenas a outra.
fonte
Hoje, enviei um rascunho do JEP ao OpenJDK sobre esse recurso de alias. Espero que eles reconsiderem isso.
Se você estiver interessado, pode encontrar um rascunho do JEP aqui: https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7
fonte
Na verdade, é possível criar um atalho para que você possa usar nomes mais curtos no seu código, fazendo algo assim:
Dessa forma, você só precisa especificar o nome longo uma vez e pode ter quantas classes especialmente nomeadas desejar.
Outra coisa que eu gosto nesse padrão é que você pode nomear a classe de implementação da mesma forma que a classe base abstrata e apenas colocá-la em um espaço para nome diferente. Isso não está relacionado ao padrão de importação / renomeação.
fonte