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 Escola de Programação: Matricula-se na escola de Programação. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

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. Criador de mais de 40 cursos, como Kotlin, Flutter, Android, persistência de dados, comunicação com Web API, personalização de telas, testes automatizados, arquitetura de Apps e Firebase. É expert em Programação Orientada a Objetos, visando sempre compartilhar as boas práticas e tendências do mercado de desenvolvimento de software. Atuou 2 anos como editor de conteúdo no blog da Alura e hoje ainda escreve artigos técnicos.

Veja outros artigos sobre Programação