Importações Redundantes
Por que será que algumas classes no Java não precisam ser importadas?
Porque há no pacote do Java chamado java.lang. Este pacote tem um comportamento diferenciado dos outros, ele é importado automaticamente pelo Java. Você pode importá-lo, mas não é preciso. Quantas importações você acha que é redundante no código a seguir?
A resposta é três. A linha 1 e 2 são redundantes porque como foi dito o pacote java.lang é importado automaticamente pelo Java. A linha 4 também é redundante porque a classe Random já tinha sido importada com a importação explícita.
Outro caso de redundância é importação de classes que estão no mesmo pacote. O Java já sabe que as classes estão no mesmo pacote e por isso não há a necessidade da importação. Vamos ver um exemplo.
public class InputImports{
public void read(Files files){
Paths.get(“name”);
}
}
Se você tentar compilar este código aparecerá que o Java não encontrou duas classes, a Files e a Paths. As duas classes encontram-se no mesmo pacote java.nio.file. Como você importaria estas classes?
Há duas maneiras, a importação wildcard e a importação explícita.
import java.nio.file.*;
ou
import java.nio.file.Files;
import java.nio.file.Paths;
Importações que não funcionam:
import java.nio.*; //o wildcard só importa classes e não pacotes.
import java.nio.*.*;//só é permitido um wildcard
import java.nio.file.Paths.*;//wildcard importa classes e não métodos.
Conflitos de Nomes
Os pacotes são importantes para evitar o conflito de classes que tem o mesmo nome. Por exemplo, a classe com o nome Date encontra-se em mais de um pacote no Java.
java.util.Date;
java.sql.Date;
Se você quiser usar o java.util.Date no código a seguir, como você faria?
public class Conflicts{
Date date;
//mais códigos
}
Creio que você já saiba a resposta.
import java.util.Date;
O problema é: e se eu quiser usar os dois Date, como faço?
Posso fazer assim?
import java.util.*;
import java.sql.*;
public class Conflicts{
Date date;
//mais códigos
}
Isto irá gerar o seguinte erro:
E se eu fizer assim:
import java.util.Date;
import java.sql.*;
public class Conflicts{
Date date;
//mais códigos
}
Agora funciona, porque a importação explícita tem prioridade sobre a importação wildcard.
Mais a pergunta persiste. E se eu quiser usar os dois Date?
Posso fazer isto?
import java.util.Date;
import java.sql.Date;
public class Conflicts{
Date date;
//mais códigos
}
Isto vai gerar um conflito de nomes e o Java não sabe qual você quer utilizar.
Soluções:
Você pode importar um normalmente e utilizar só que o outro terá sempre que ser explícito.
import java.util.Date; //importe comum
public class Conflicts{
Date date; //não preciso explicita no resto do código
java.sql.Date sqlDate;
/*importe explicito, toda vez que for utilizar o sqlDate terei que escrever desta maneira*/
//mais códigos
}
ou explicitar os dois sempre.
public class Conflicts{
java.util.Date date;
java.sql.Date sqlDate;
//mais códigos
}
Adquira o ebook Aprendendo Java para Certificação Volume 1 ->http://ebook.micheladrianomedeiros.com.br/
#java #certificação
Deixe um comentário