Argumento opcional, não tem?

Bom dia amigos!

Sempre que eu chamar um método que possui parâmetros, tem como tornar algum destes parâmetros opcional?
Exemplo:

private void MyMethod(String s, int i, Long l){}
MyMethod("Felipe",1000,3034526);

Nao posso chamar assim:

MyMethod("Felipe");

Ou posso talvez passar argumentos nulos ou simplesmente ignorá-los no método que os recebe… :?: :?:

[]´s!

tem sim

   private void myMethod(String s, int i, Long l){
         //esse aqui faz o bagulho

   }  

   private void myMethod(String s, int i){
         //esse aqui chama o outro com valor padrao
         this.myMethod(s, i, new Long(2));
   }  


   private void myMethod(String s) {
         //esse aqui chama o outro com dois valor padrao
         this.myMethod(s, 0, new Long(2));
   }  

sds

Cara, você pode fazer isso utilizando sobrecarga de métodos, assim terá um método para cada chamada sua (não muito elegante e produtivo), ou então pode utilizar um recurso do java 5 chamado varargs…
Procura no google sobre varargs…
Aí vai uma ajuda…
http://today.java.net/today/2004/09/30/varargs.pdf

[]'s.

Ola Rage,

Na versção do Java 5 saiu uma forma de argumento nova chamada “varargs” que é exatamente o que voce quer, fazer com que um argumento seja opcional ou nao. E ele tem uma coisa a mais, este argumento pode receber inúmeros parametros nele.

Ex:

private void myMethod(String s, int i String... arg)

quando vc chamar este método vc pode chamá-lo das seguintes maneiras:

myMethod("User", 1);
myMethod("User", 1, "a");
myMethod("User", 1, "a", "b");
myMethod("User", 1, "a", "b", "c");

Ele aceita tanto nenhum argumento, como infinitos.

Os detalhes importantes são:

  • isso funciona para String, Long, etc e vc soh precisa acrescentar os “…” no final do tipo;
  • este tipo "vararg’ deve SEMPRE ser o ultimo argumento do seu método.

Espero ter ajudado.

Abraços,

Leonardo

Você pode fazer uma coisa um pouco nojenta:

public void myMethod(String s, int i, Long l){
}  
public void myMethod(String s, int i) { myMethod (s, i, 1000); }
public void myMethod(String s) { myMethod (s, 1000, 3034526); }

Ou então usar varargs, mas você precisa tomar um pouco de cuidado. No seu caso, os tipos dos parâmetros são todos diferentes, e varargs é mais adequado quando os tipos são iguais. Se todos os tipos forem diferentes, então você tem de usar Object, como no caso que implementa seu exemplo:

public void myMethod (String s, Object... params) {
    int i = 1000; Long l = 3034526;
    if (params.length >= 1 && params[0] instanceof Integer) i = (Integer) params[0];
    if (params.length >= 2 && params[1] instanceof Long) l = (Long) params[1];
    ...
}

Se os argumentos fossem do mesmo tipo e a versão do java >=5, vc poderia chamar assim:

private void myMethod(String... s){ //... }

Neste caso, vc receberia um arrai de strings dentro do seu método, com quantos parametros vc quizesse…
Mas pra isso vc só pode usar um (…) e sempre como o ultimo argumento do método.

[edited]O pessoal tá sendo rápido… 3 respostas iguais ao mesmo tempo… isso sim, deve acontecer…[/edited]

lembrando que o recurso vargs é do java 5… se tentar em qualquer versao anterior o codigo nao compila.