Oi drigo.angelo,
Realmente seu exemplo serve para mostrar que nesse caso o método nao precisaria ser estático…
Pq ele está executando algo que nao esta relacionado ao retorno…talves…
Mas vamos olhar para as Classes Wrappers… String, Integer, Float,Double,Character etc…
O que é o método valueOf()?..não e estático…sua finalidade nao é específica? vc precisa de uma instancia de um integer para converter uma string para int?
/** Um caso Absurdo
*
*/
Integer i=new Integer("1"); // Instanciando...
int x=i.intValue(); // int é primitivo e nao aceita string... por isso precisa converter uma string em um int certo?
//Será que é necessário instanciar nesse caso de forma explicita?
/**
// Fica melhor assim!!
int i=Integer.valueOf("1").intValue();
*/
Xxx.valueOf dos Wrappers serve “especificamente para se criar um objeto e devolve-lo”
no caso do Integer.valueOf(String s) ou Double.valueOf(String);
agora o método intValue() do Wrapper Integer…precisa de uma instancia de Integer pois depende do valor contido no objeto e por isso nao poderia ser estático(e náo é mesmo)…
Na minha opiniao, métodos que não tem relacao com as variaveis de instancia (até porque static nao acessam atributos de instancia) como métodos utilitarios especificos devem ser estaticos…usar um método estático de uma classe nao é anti OO… se for assim o que seria da pratica do NumberFormat, DateFormat, Wrappers, mantendo a relacao do método com a classe em sim, como um membro dela mesmo classe(Como é definido no fundamento de static)…
No caso dos metodos utilitarios nao serem static ai sim, teria impacto no desempenho caso vc precisasse da instancia dessa classe em diverssas partes do programa…pois iria aumentar o numero de objetos no heap()…pense bem…
E se aplicando o conceito da coesão em OO, a classe utilitaria seria especifica e seus métodos independete da qntidade de parametros seriam static…
Esse é meu ponto de vista.
Fallow