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:


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 trilha de certificação Java que aborda todas as peculiaridades da linguagem Java com o intuito de preparar o aluno para a certificação.


Content Editor at Alura and Software Developer

  • Alberto

    Sei que não é o assunto do post, mas como não achei nenhum a sessão de contato, vou tentar por aqui. hehe

    Estou estudando e tentando colocar um projeto pessoal para frente, usando o vraptor.
    Mas estou sentindo bastante dificuldade, pois o pouco material que encontro esta desatualizado ou não me ajuda.

    Se não for pedir muito, poderia abrir uma categoria destinada ao vraptor, explicando dificuldades do dia a dia.

    Muito obrigado e parabéns pelo blog esta muito bom.

    • Igor Mourão Gomes

      Tanto o vraptor 3 como o 4 possuem vídeos na Alura, e o 4 possuem um livro bem legal na casa do codigo do Lucas 🙂
      Qualquer coisa fale cmg

      • Alberto

        Eu fiz todos os curso se vraptor 4 que tem no alura e mesmo assim ainda sinto bastante dificuldade. Pois os cursos, são muito básicos não se aprofundam..

Próximo ArtigoQuais os cursos mais recomendados pelos alunos em 2015?