Importações Redundantes
Espere um minuto! Estamos nos referindo ao System sem uma importação e o Java apenas encontrou. Há um pacote especial no mundo Java chamado java.lang. Este pacote é especial em que é importado automaticamente. Você ainda pode digitar este pacote em uma declaração import, mas você não precisa. No código a seguir, quantas das importações você acha que são redundantes?
1: import java.lang.System;
2: import java.lang.*;
3: import java.util.Random;
4: import java.util.*;
5: public class ImportExample {
6: public static void main(String[] args) {
7: Random r = new Random();
8: System.out.println(r.nextInt(10));
9: }
10:}
A resposta é que três das importações são redundantes. As linhas 1 e 2 são redundantes porque tudo em java.lang é automaticamente considerado como importado. A linha 4 também é redundante neste exemplo porque Random já foi importado de java.util.Random.
Se a linha 3 não estivesse presente, o java.util.* Não seria redundante, já que cobriria importando aleatoriamente. Outro caso de redundância envolve a importação de uma classe que está no mesmo pacote que a classe importando. Java procura automaticamente no pacote atual por outras classes. Vamos dar uma olhada em mais um exemplo para se certificar de que você entende os casos extremos para importações. Para este exemplo, Files e Paths estão no pacote java.nio.file. Você não precisa memorizar este pacote para o exame da OCA (mas você deve saber disso para o Exame OCP). Ao testar sua compreensão de pacotes e importações, o exame da OCA usará pacotes que você nunca viu antes. A pergunta vai deixar você saber qual pacote a classe está e se você precisa saber, a fim de responder à pergunta. Quais importações você acha que funcionariam para obter esse código para compilar?
public class InputImports {
public void read(Files files) {
Paths.get("name");
}
}
Há duas respostas possíveis. O mais curto é usar um curinga para importar ambos ao mesmo tempo:
import java.nio.file.*;
A outra resposta é importar as duas classes explicitamente:
import java.nio.file.Files;
import java.nio.file.Paths;
Agora vamos considerar algumas importações que não funcionam:
import java.nio.*; // NO GOOD – a wildcard only matches
//class names, not "file.*Files"
import java.nio.*.*; // NO GOOD – you can only have one wildcard
//and it must be at the end
import java.nio.files.Paths.*; // NO GOOD – you cannot import methods only class names