[RESOLVIDO] Para que server o () antes de acessar o método?
17 respostas
alexandref93
Então galera, minha dúvida é o seguinte, criei um objeto JFrame e acessei o método setSize dele, frame.setSize(500, 500); blz, até ae eu entendi tudo, mais por exemplo em situação como essa frame.getContentPane().add(button); por que vai o “()” depois getContentPane ??? Não entendi isso!!!
É um método do JFrame que não recebe nenhum parâmetro!
Giulliano
A verdade vai muito além disto. Este parentêses foi definido pelos criadores da linguagem Java para deixar explicito que vc esta invocando um método. Em Ruby, por exemplo os parantêses não são obrigatórios.
thiago.correa
A verdade vai muito além disto. Este parentêses foi definido pelos criadores da linguagem Java para deixar explicito que vc esta invocando um método. Em Ruby, por exemplo os parantêses não são obrigatórios.
Que quer dizer que você está invocando um método sem parâmetros! :evil:
alexandref93
A verdade vai muito além disto. Este parentêses foi definido pelos criadores da linguagem Java para deixar explicito que vc esta invocando um método. Em Ruby, por exemplo os parantêses não são obrigatórios.
Que quer dizer que você está invocando um método sem parâmetros! :evil:
aaahhh acho que entendi, então seria um método invocando outro método no caso o add??? correto???
davidbuzatto
Calma pessoal... Calma...
Alexandre, o que acontece é o seguinte:
// isso aquiframe.getContentPane().add(button);// é a mesma coisa que isso aquiContainercontainer=frame.getContentPane();container.add(button);
Entendeu? Você encadeia os métodos, chamando um método no retorno de outro método.
[]´s
Marky.Vasconcelos
alexandref93:
aaahhh acho que entendi, então seria um método invocando outro método no caso o add??? correto???
Não exatamente, não é um método invocando outro. Voce esta invocando um método do objeto retornado do primeiro método.
No caso, getContentPane() retorna um Container, e o método add é do Container.
Perceba que voce nao pode fazer isso quando métodos tem retorno ‘void’, por que ele não tem um objeto para invocar outro método.
PS: A não ser que seja modificado e implementam algo chamado Implicit Covariant Return, onde métodos ‘void’ sempre tem ‘return this;’ implicitamente e voce pode fazer chamadas encadeadas no mesmo objeto.
thiago.correa
Marky.Vasconcelos:
PS: A não ser que seja modificado e implementam algo chamado Implicit Covariant Return, onde métodos ‘void’ sempre tem ‘return this;’ implicitamente e voce pode fazer chamadas encadeadas no mesmo objeto.
Gostei dessa mudança em partes, vai trazer praticidade na codificação, mas em contrapartida acho que aí começa a distorcer muito a linguagem!
alexandref93
davidbuzatto:
Calma pessoal... Calma...
Alexandre, o que acontece é o seguinte:
// isso aquiframe.getContentPane().add(button);// é a mesma coisa que isso aquiContainercontainer=frame.getContentPane();container.add(button);
Entendeu? Você encadeia os métodos, chamando um método no retorno de outro método.
[]´s
oO, acho que perdi mais ainda, pera ae, meu, acho que agora não entendi de vez!! =s!
//O objeto "fulano" tem um método chamado retornaUmCicrano()Cicranocicrano=fulano.retornaUmCicrano();//Por sua vez, o objeto "cicrano" tem TAMBÉM um método, o retornaUmBeltrano()Beltranobeltrano=cicrano.retornaUmBeltrano();
Na verdade, o que você está fazendo é encadear a chamada de métodos, o que é uma característica da linguagem Java. Pra facilitar a nossa vida. Porque assim a gente "economiza" digitação, e porque o código fica mais legível.
Isso permite inclusive que determinados frameworks criem praticamente uma "linguagem nova de programação", tornando possíveis códigos como esse:
Um framework, aliás, que usa isso é o Vraptor 3, do pessoal da Caelum. Recomendo muito!
kenneth
thiagobaptista
(Mudando um pouco o assunto do topico…)
Brother, vou precisar estudar VRaptor, e como vi que voce mencionou ali,
tem alguma sugestao pra comecar a estudar?
Henrique.tenorio
Entedimento-------------------- o JFrame é um objeto certo!? esse objeto é composto por outros objetos certo!? um carro possui um cambio certo?! o carro é um objeto e cambio tambem certo?!. Logo o cambio faz parte do carro. O JFrame possui um painel de conteudos ( Uma parte do JFrame - objeto que ajuda ele ) getContentPane() retorna uma parte do JFrame um objeto é claro. E como todos os objetos possuem metodos getContentPane()-> um objeto que foi retornado possui metodos como o add() , getContentPane().add( botao ). Ou carro.getCambio().proximaMarcha( 2 ). Qualquer coisa estamos ae T+
thiagobaptista
No site da própria Caelum, além do treinamento que eles oferecem de VRaptor, há uma apostila gratuita pra se baixar. O legal é que essa apostila aborda também um pouco de Hibernate.
Também há o site oficial do VRaptor, que tem alguns tutoriais muito bons e a documentação oficial.
alexandref93
thiagobaptista:
alexandref93:
La na classe, eu instanciei um objeto, blz.... esse objeto possui um retorno de um outro objeto que possui um certo método!!! é isso????
Quase, mas o raciocínio é esse mesmo! Você instanciou um objeto, e esse objeto tem um método, que esse sim tem um retorno.
Só que o retorno desse método é um outro objeto... que também tem um método!
//O objeto "fulano" tem um método chamado retornaUmCicrano()Cicranocicrano=fulano.retornaUmCicrano();//Por sua vez, o objeto "cicrano" tem TAMBÉM um método, o retornaUmBeltrano()Beltranobeltrano=cicrano.retornaUmBeltrano();
Na verdade, o que você está fazendo é encadear a chamada de métodos, o que é uma característica da linguagem Java. Pra facilitar a nossa vida. Porque assim a gente "economiza" digitação, e porque o código fica mais legível.
Isso permite inclusive que determinados frameworks criem praticamente uma "linguagem nova de programação", tornando possíveis códigos como esse:
A verdade vai muito além disto. Este parentêses foi definido pelos criadores da linguagem Java para deixar explicito que vc esta invocando um método. Em Ruby, por exemplo os parantêses não são obrigatórios.
Com poucas palavras, o nosso amigo Giulliano definiu um dos verdadeiros motivos de se usar sempre os parenteses na chamada de métodos, como também no momento de suas declarações em Java. Eles não só servem para identificar os métodos, como também servem para passar parâmetros para os procedimentos invocados e a mesmo tempo receber os valores de retorno do procedimento executado e armazená-los. Como assim :?:
Alguém já perguntou onde é que são armazenado os valores ou a referência de retorno do métodos :?: Simplesmente são armazenados nos nomes dos métodos, que funcionam como se fossem variáveis normais primitivas ou de instâncias, só que com o recurso especial de receber os seus valores após um procedimento ser executado, justamente através dos parenteses, dai a necessidade de colocar os parenteses , tanto na chamada quanto na declaração do método.
No caso dos métodos “void”, que virtualmente não retornam nada, na verdade eles retornam uma referência nula, como se fosse um objeto nulo.
Assim como no Ruby, também o Object Pascal do Delphi, não há necessidade de usar os parenteses, exceto na passagem de parâmetros, sendo eles apenas opcional, isto porque os compiladores do Delphi tem um recurso de mapeamento de ponteiros da memória que diferencia as variáveis que são métodos e as que são apenas variáveis comuns e variáveis de instâncias. Não sei quanto ao Ruby, se funciona da mesma forma