No Python, você pode fazer um:
from a import b as c
Como você faria isso em Java, como eu tenho duas importações que estão em conflito.
No Python, você pode fazer um:
from a import b as c
Como você faria isso em Java, como eu tenho duas importações que estão em conflito.
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,
import com.text.Formatter;
private Formatter textFormatter;
private com.json.Formatter jsonFormatter;
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:
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
Provavelmente vale a pena notar que o Groovy possui esse recurso :
import java.util.Calendar
import com.example.Calendar as MyCalendar
MyCalendar myCalendar = new MyCalendar()
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 */
.
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
Na verdade, é possível criar um atalho para que você possa usar nomes mais curtos no seu código, fazendo algo assim:
package com.mycompany.installer;
public abstract class ConfigurationReader {
private static class Implementation extends com.mycompany.installer.implementation.ConfigurationReader {}
public abstract String getLoaderVirtualClassPath();
public static QueryServiceConfigurationReader getInstance() {
return new Implementation();
}
}
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.