Como fazer um import static em Java

Como fazer um import static em Java

Todos os livros do meu sistema precisa de um nome, autor e um código de categoria. Para identificar o código da categoria eu tenho a classe CodigoCategoria no pacote br.com.caelum.alura.codigo:


package br.com.caelum.alura.codigo;

public class CodigoCategoria {

public static final int AGILE = 1;
public static final int FRONT_END = 2; 
public static final int GAMES = 3; 
public static final int JAVA = 4; 
public static final int MOBILE = 5; 
public static final int WEB = 6; 
public static final int OUTROS = 7;
}

E também tenho a minha classe Livro no pacote br.com.caelum.alura.model:

Banner da promoção da black friday, com os dizeres: A Black Friday Alura está chegando. Faça parte da Lista VIP, receba o maior desconto do ano em primeira mão e garanta bônus exclusivos. Quero ser VIP

package br.com.caelum.alura.model;

public class Livro {

private String nome; 
private String autor; 
private int codigoCategoria;

public Livro(String nome, String autor, int codigo) { 
    this.nome = nome; 
    this.autor = autor; 
    this.codigoCategoria = codigo;
}

//métodos

}

Certo, agora irei criar um livro novo na classe Main no pacote br.com.caelum.alura.main:


package br.com.caelum.alura.main;

public class Main { public static void main(String[] args) { 
    Livro novo = new Livro(); 
    }
}

Ué, não compila... Como podemos ver, a classe Livro e a Main estão em pacotes diferentes, então precisamos importar a classe Livro.


package br.com.caelum.alura.main;
import br.com.caelum.alura.model.Livro;

public class Main { public static void main(String[] args) { 
    Livro novo = new Livro("Livro de Java", "João da Silva", /\* qual código??? \*/); } }

Eu não sei qual é o código para livros de Java, então eu vou pedir para a classe CodigoCategoria. Vamos importá-la:


package br.com.caelum.alura.main; 
import br.com.caelum.alura.model.Livro; 
import br.com.caelum.alura.codigo.CodigoCategoria;

public class Main { public static void main(String[] args) { 
    Livro novo = new Livro("Livro de Java", "João da Silva", CodigoCategoria.JAVA);

System.out.println(novo); } }

Verificando as informações do livro:

 > nome: Livro de Java autor: João da Silva codigoCategoria: 4

Ótimo, eu consegui criar meu livro, mas agora eu quero fazer uma lista de livros:


//package e imports 
import java.util.ArrayList;
import java.util.List;

public class Main { public static void main(String[] args) { 
    Livro livro1 = new Livro("Livro de Java", "João da Silva", CodigoCategoria.JAVA); Livro livro2 = new Livro("Livro de Android", "Maria dos Santos", CodigoCategoria.MOBILE); 
    Livro livro3 = new Livro("HTML e CSS", "Rodrigo Teles", CodigoCategoria.FRONT_END);

List<Livro> livros = new ArrayList<Livro>();

livros.addAll(Arrays.asList(livro1, livro2, livro3)); }

}

Consigo criar quantos livros eu quiser sem me preocupar com o código da categoria! Porém ainda tem um detalhe... Veja que todas as vezes que queremos um código, precisamos sempre utilizar o prefixo "CodigoCategoria.", não seria melhor simplesmente digitar JAVA e a classe já saber qual é o código? Já que todas as constante da classe CodigoCategoria são static, podemos fazer o import static. Certo, da mesma forma que nos métodos, sempre usamos o static antes, então faremos static import também:


static import br.com.caelum.alura.codigo.CodigoCategoria.JAVA;

Ops! Não compila! Para fazer qualquer import, SEMPRE escreva a palavra import antes:


//package e imports 
import static br.com.caelum.alura.codigo.CodigoCategoria.JAVA; 
import static br.com.caelum.alura.codigo.CodigoCategoria.MOBILE; 
import static br.com.caelum.alura.codigo.CodigoCategoria.FRONT_END;

public class Main { public static void main(String[] args) { 
    Livro livro1 = new Livro("Livro de Java", "João da Silva", JAVA); 
    Livro livro2 = new Livro("Livro de Android", MOBILE); 
    Livro livro3 = new Livro("HTML e CSS", "Rodrigo Teles", FRONT_END); //código

}

}

Resolvemos o problema, porém agora eu terei que digitar uma a uma...poxa, muito chato isso, né? Da mesma forma que importamos mais de uma classe usando o "*", podemos importar todas as constantes estáticas da classe CodigoCategoria:


//package e imports import static br.com.caelum.alura.codigo.CodigoCategoria.\*;

public class Main { public static void main(String[] args) { 
    Livro livro1 = new Livro("Livro de Java", "João da Silva", JAVA); 
    Livro livro2 = new Livro("Livro de Android", MOBILE); 
    Livro livro3 = new Livro("HTML e CSS", "Rodrigo Teles", FRONT_END); //código

}

}

O código continua funcionando da mesma forma! E se precisarmos de uma outra categoria? Basta chamar pelo nome da categoria! Simples assim.

E aí, gostou do import estático? Quer aprender mais a fundo a linguagem Java? Pensando nisso o instrutor Guilherme Silveira criou a certificação Java que aborda todas as peculiaridades da linguagem Java com o intuito de preparar o aluno para a certificação.

Alex Felipe
Alex Felipe

Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Atualmente cria conteúdo no canal https://www.youtube.com/@AlexFelipeDev.

Veja outros artigos sobre Programação