ExamLab: Questão 7

public class Expons{

     static Stores st;

     public static void main(String argv[]){
          st=new Stores();
          Object ob1=getFormattedObject(Pattern.compile("H[a-d][k-m]"), "H[a-b][k-m]");
          Object ob2=getFormattedObject(st.pt1.matcher("Hello Hallo"), "[a-e][l]lo");
          Object ob3=getFormattedObject(null); // #1
          System.out.println(ob3);
     }

     public static Object getFormattedObject(Object ob, String... s){
          if (ob instanceof Pattern){
               st.pt1=((Pattern)ob).compile(s[0]);
               return null;
          }else if (ob instanceof Matcher){
               st.mt1=(Matcher)ob;
               return null;
          }else{
               st.mt1.find();
               st.st1=st.mt1.group();
               return st.st1;
          }
     }

}


class Stores{
     Pattern pt1; Matcher mt1; String st1;
}

Eu respondi que o programa não compilaria porque na linha #1 ele ta passando somente 1 parametro pra um método que supostamente recebe 2… Esse programa compila e imprime “Hal”.
Como funciona isso?

Os parâmetro do tipo String … s, chamados de parâmetros abertos, são transformados em uma array no fim, eles devem sempre ser declarados como o ultimo parâmetro e eles não precisam sempre ser passados.

[]s

Os var-args certo?

Isso é so para var-args String ou pra qualquer tipo de var-args?

Esse var args que você diz é o parâmetro do main? Se for ele não tem nada a ver com parâmetro aberto, o String arg[] faz parte a assinatura do método main, mas os parâmetros abertos podem ser de qualquer tipo, você poderia fazer por exemplo

public void metodo(Object umParametro, Object ... outrosParametros) {}

Att

Nao! Mas eu entendi! É porque a primeira vez que eu vi essa sintaxe foi sendo chamada de var-args!
Que voce chama de parametro aberto!

public static void main(String[] args){};
public static void main(String… args) {};

Os dois funcionam!

Vlws!

Não sabia que podia declarar o main dessa maneira, com parâmetro aberto, interessante, mas faz todo sentido, pois todo parâmetro aberto viram uma array depois, então dá na mesma :smiley: , vivendo e aprendendo xD

[]s