Como faço!?

9 respostas
P

Boa tarde.

Como se faz para desenvolver uma classe que não pretendo instanciar, simplesmente chamar seus métodos quando e onde bem desejar?

Algum exemplo simples por favor.

Desde já agradeço.

9 Respostas

brunogamacatao

Você precisa de métodos estáticos, que são métodos de classe e não de instância.
Ex:

public class Calculadora {
    public static int soma(int a, int b) {
        return a + b;
    }
}

Agora como utilizar esta classe:

public class Teste {
    public static void main(String[] args) {
        System.out.println("2 + 2 = " + Calculadora.soma(2, 2));
    }
}

Preste atenção no modificador static na declaração do método soma da classe Calculadora.

von.juliano
/**
 * Formata o valor informado como moeda, no formato ###,###,##0.00.
 * 
 * @param valor
 *            O valor à ser formatado.
 * @return Uma String formatada com a máscara ###,###,##0.00.
 */
public class Moeda {
	public static String formata(double valor) {
		DecimalFormatSymbols simbolosDecimais = new DecimalFormatSymbols();
		simbolosDecimais.setDecimalSeparator(',');
		simbolosDecimais.setGroupingSeparator('.');
		DecimalFormat df = new DecimalFormat("###,###,##0.00", simbolosDecimais);
		return df.format(valor);
	}
}
Esse método pode ser chamado por outra classe sem instanciar uma Moeda, da seguinte forma:
Moeda.formata(valor);
A jogada é criar um método estático. Se quiser que o objeto não seja instanciado de forma alguma, crie um construtor privado vazio.

Blz? Qq dúvida posta aew! Flw! :thumbup:

G

Crie uma classe com um contrutor padrão privado e somente com métodos estáticos.

ex.:
class Util {
     private Util(){}

     public static boolean validateBlaBlaBla(){
          //...
     }
}
ViniGodoy

Ok... você pode criar uma classe só com métodos estáticos, embora eu realmente não recomende isso:

public final void UmaClasse {
   private UmaClasse() { } //Proibimos o uso do construtor.

   public static metodo1() {
       //faz algo
   }

   public static metodo2() {
       //faz algo
   }

   public static metodo3() {
       //faz algo
   }
}

//O uso seria
UmaClasse.metodo1();
UmaClasse.metodo2();

Outra maneira, que também não legal, é criando um Singleton.

public class UmSingleton {
   private static UmSingleton instance = new UmSingleton();
 
   private static UmSingleton getInstance() { return instance; }
   private UmSingleton() {};

   public metodo1() {
       //faz algo
   }

   public metodo2() {
       //faz algo
   }
}

//Uso
UmSingleton.getInstance().metodo1();
UmSingleton.getInstance().metodo2();

O que se recomenda? Você criar objetos da classe. Se precisar controlar o a criação desses objetos, use o padrão Factory Method, Registry ou um framework de Dependency Injection.

Bravox

Cria uma classe com métodos estatísticos ex:

public class Teste {

	public static void main(String[] args) {
		
		SuaClasse.fazAlgumaCoisa();
	}
}
public class Teste {

	public static void main(String[] args) {
		
		SuaClasse.fazAlgumaCoisa();
	}
}
Bravox

ViniGodoy:
Ok… você pode criar uma classe só com métodos estáticos, embora eu realmente não recomende isso:

Mesmo se essa classe for utilitaria como a StringUtils do jakarta commons ?

P

Caraca!

Nunca fui tão bem tratado aqui!

Estou muito contente.

Muito obrigado MERMO!

ViniGodoy

É bom pensar bem antes de decidir se uma classe é uma Utility class ou não.
Utility classes não são extensíveis e, na verdade, não são nada orientadas a objetos.

Agora na prática, eu mesmo já fiz classes assim. E a própria Sun também, como a classe Math.

Só fica a ressalva para não abusar. Para lembrar que classes assim não são extensíveis e não se beneficiam de polimorfismo.

P

Mais uma vez muito obrigado!

Criado 25 de outubro de 2007
Ultima resposta 25 de out. de 2007
Respostas 9
Participantes 6