Passagem por Referência

10 respostas
T

Falae Pessoal, blz??
Seguinte, no meu trabalho de conclusao de curso, estou desenvolvendo um programa que faz uma uma chamada a uma classe herdada de uma JDialog.

Para obter um retorno dessa classe chamada, eu passo uma variável como parâmetro, para que o resultado fosse retornado através dela, mas essa passagem deve ser feita por referência.

Gostaria de saber como consigo fazer uma passagem de parâmetro por referência em Java…

Valw…

10 Respostas

E

eae blz?

hein naum entendi direito como é que tu quer fazer

mas quanto a referencia digamos:
vc tem um JTextArea no seu JDialog e quer setar o valor
para esse jtextArea a partir de uma outra classe

vc passa a referencia do objeto JTextArea para a outra classe
e lah na outra classe vc manipula esse componente como se estivesse
na classe aonde ele efetivamente foi codificado acessando os seus métodos

mas para isso vc precisa:

  • na sua classe que vai manipular ou capturar ou fazer um display de dados nesse textarea vc precisa implementar um método para que esse objeto possa ser enviado para a sua classe que irá manipular o conteudo do mesmo, ex.:
...
JTextArea comentario;
...
public void setComentario( JTextArea comentario ) {
   this.comentario = comentario;
}
...

fazendo isso vc está criando um método na sua classe que recebe uma referencia do objeto JTextArea que está no seu JDialog

espero ter ajudado, qq coisa daki a pouco surge novas explicações postadas por aki :wink:

[]´s

M

Não existe passagem por referencia em java… ta ai um ex:

public static void main( String [] args ) {
 
    Object o = new String( "aaa" );
    f( o );
    System.out.println( o.toString() ); // ja aviso q a saida será "aaa"...
 }
 
 public static void f( Object o ) {
 
    o = new String( "bbb" );
 }
T

O que eu to querendo fazer, é um sisteminha simples de autenticação de senha, pra usar no prog.
Então quando chamo uma determinada função do programa, ele inicia a JDialog, cuja classe ne verdade é a Senha.
Então eu passei um boolean como parametro

boolean retorno;
Senha dlg = new Senha (retorno);

//na classe o construtor fiz do tipo
public Senha (final boolean & ret)
{
        if (....)
              retorno = true;
}

o que eu pretendo, é a partir do programa que chama a Senha, o programa principal, saber se posso habilitar a função desejada.

uma solução que eu tinha pensado, seria usar try catch throw…
alguma sugestão diferente??

valew[/code]

M

“thimarcal”:
O que eu to querendo fazer, é um sisteminha simples de autenticação de senha, pra usar no prog.
Então quando chamo uma determinada função do programa, ele inicia a JDialog, cuja classe ne verdade é a Senha.
Então eu passei um boolean como parametro

boolean retorno;
Senha dlg = new Senha (retorno);

//na classe o construtor fiz do tipo
public Senha (final boolean & ret)
{
        if (....)
              retorno = true;
}

o que eu pretendo, é a partir do programa que chama a Senha, o programa principal, saber se posso habilitar a função desejada.

uma solução que eu tinha pensado, seria usar try catch throw…
alguma sugestão diferente??

valew[/code]

não entendi nd… :roll:

T

Tentei fazer também por try/catch/throw
mas a exceção é lançada a partir da Dialog Senha:

try
{
            Senha dlg = new Senha(senha);
}
catch (trueException tr )
{
	Comodos.setEnabled (true);
	Usuario.setEnabled (true);
	Adm.setEnabled (false);
}
catch (falseException fl)
{
     JOptionPane.showMessageDialog (null,"A senha digitada estava errada, continuando no modo usuário");
}

o construtor de senha é o seguinte

public Senha (final String senha) throws trueException, falseException
{
        if (pswd.getText().equals(senha))
             throw new trueException();
        else
             throw new falseException();
}

mas como a exceção é lançada a partir de dlg (objeto de Senha), os catch não estão pegando as exceções e então não estou conseguindo tratá-las.

Alguém tem alguma sugestão???

T

Matheus,
o que eu fiz é o seguinte:

criei uma classe Senha

public class Senha extends JDialog
{
..
}

é uma classezinha simples, que contém apenas um JPasswordField e 2 botões (ok e cancel).

essa Dialog é incluída no meu programa, quando desejo mudar do modo Usuário para o modo administrador.

então no construtor de Senha, eu passava um boolean como parâmetro, desejando que a variável fosse modificada, pra no meu programa eu saber se a autenticação tinha sido bem sucedida.

eu fazia a chamada assim, no programa principal:

Senha dlg = new Senha (retorno, senha);

onde retorno é uma variável boolean do meu programa principal;

essa chamada, chama o contrutor

public Senha (final boolean &retorno, final String senha)
{
     ...
     if (pswd.getText().equals(senha))
            retorno = true;
     else
            retorno = false;
}

no entanto, essa passagem por referência não estava funcionando, já que Java só trabalha com passagem por valor.

No meu comentário acima, eu explico uma tentativa que fiz, de utilizar tratamento de exceções, ao invés desse código q coloco aqui, mas também não consegui, já que a exceção que é lançada dentro do construtor de Senha não está sendo pego pelos blocos catch.

Alguma sugestão??

E

hum, cara faz um teste eu vi no seu ultimo post o codigo

public Senha (final boolean &retorno, final String senha) 
{ 
     ... 
     if (pswd.getText().equals(senha)) 
            retorno = true; 
     else 
            retorno = false; 
}

altere para:

public Senha ( boolean retorno, String senha ) 
{ 
     ... 
     if (pswd.getText().equals(senha)) 
            retorno = true; 
     else 
            retorno = false; 
}

vc esta utilizando a notação de C/C++ em java…

nota a linguagem java quando vc faz um método para passar um parametro sendo esse valor naum sendo do tipo primitivo (int, double, float, char, boolean) ele passas a referencia do objeto em memoria ou seja ele tem o efeito similar ao & antes da variavel no parametro do método

e quando o valor que vc colocar no seu método que será parametro for do tipo primitivo ele sempre passará por valor, e quando for objeto ele sempre passará a referencia do objeto e naum uma copia do objeto…

:wink:

ps.: vc estava pensando, estruturando o seu pensamento com base na sintaxe de envio de parametros na linguagem C/C++?
:roll:

[]'s

T

até usei uma base do conhecimento de c++, pra pensar em pasar por referencia assim…
mas meu codigo base era esse qvc falou…
mas na compilacao, ele diz q estou usando variavel de outra classe (acho q era isso), pra declarar como final…
ai qdo declaro como final, ele diz q estou tentando modificar o valor…

E

eae blz?

cara tenta usar a passagem como eu coloquei um exemplo
falando pra vc alterar o formato do seu codigo pelo jeito que eu
propuz e testar…

olhe o jeito do codigo que eu coloquei no post anterior
faz um teste dakele jeito/ estilo de codigo e ve se funciona :wink:

[]'s

T

ae pessoal… queria agradecer a tds q me ajudaram…
a solucao q encontrei foi simples… e nao tinha pensado antes…
apenas criei uma variavel membro na classe Senha…
como eu instanciava um objeto dessa classe no programa, dps era só eu ter acesso a essa variavel, q td se resolveu…

Criado 25 de maio de 2005
Ultima resposta 29 de mai. de 2005
Respostas 10
Participantes 3