dúvida em relaçao ao uso do new

tenho o seguinte código:

[code]
public class Calculadora
{
private int soma;

public void setSoma( int x, int y)
{
	soma = x+y;
}

public int getSoma()
{
	return soma;
}

}[/code]

eu crio o objeto dessa classe assim:

Calculadora myCalculadora = new Calculadora(); myCalculadora.setSoma(10,20);

Até aí nada de novo, mas tem algumas vezes que o pessoal faz assim:

myCalculadora.setSoma(new(algumacoisa));

porque isso?..quer dizer que eu chamo um método que recebe um valor de outra classe?..eheheh

Não entendi…isso nao…

Alguém pode ajudar?

Grato…

da uma olhada em objetos anônimos… nesso código que você escreveu acima é provável que seja por exemplo somas 4 + 5:


myCalculadora.setSoma( new Integer(4).intValue(), new Integer(5).intValue() );

Nesse casomyCalculadora.setSoma(new(algumacoisa));

E esperado como parametro um objeto de uma determinada classe.

[quote=“BrunoBastos”]da uma olhada em objetos anônimos… nesso código que você escreveu acima é provável que seja por exemplo somas 4 + 5:

[code]

myCalculadora.setSoma( new Integer(4).intValue(), new Integer(5).intValue() );

[/code][/quote]

nao entendi…heheehe…esse código acima eu escrevi aqui só pra ilustrar mesmo…por exemplo, quando vc usa swing e vai implementar um cor no fundo, o método recebe um parametro do tipo Color c, aí faz assim:
setBackground(new Color(255,0,255); e eu nao entendi…tipo foi criando uma variavel do tipo color?..é por isso uso o new?

hehe

desculpa…é que é muita coisa…fiquei meio perdido…rs

O metodo setBackground() espera um parametro do tipo Color, então o que você está fazendo é criar um novo objeto Color e passar direto para o setBackground() sem guardar em uma variavel antes, isso é feito porque em alguns casos teriamos que criar uma variavel só pra passar o parametro para o metodo, sendo que ela não seria usada mais em lugar nenhum.

Esse codigo aí é equivalente a:

[code]Color cor = new Color(255,0,255);

setBackground(cor);[/code]

O metodo setBackground() espera um parametro do tipo Color, então o que você está fazendo é criar um novo objeto Color e passar direto para o setBackground() sem guardar em uma variavel antes, isso é feito porque em alguns casos teriamos que criar uma variavel só pra passar o parametro para o metodo, sendo que ela não seria usada mais em lugar nenhum.

Esse codigo aí é equivalente a:

[code]Color cor = new Color(255,0,255);

setBackground(cor);[/code][/quote]

Entendi… :lol:

Então eu posso criar meus próprios valores para passar por parâmeto?

por exemplo:

myCalculadora.Acao(Operador operador) << recebe um parametro do tipo operador
myCalculadora.Acao(new Operador(+))

ou viajei demais? acho que a lógica disso nao tá lá essas coisas…mas é só pra ver se é isso…

Seria isso?..
Muito Grato

quando vocÊ faz

myCalculadora.Acao(new Operador(+))

você tem um objeto anônimo. Você não vai ter a referência dele na linha debaixo. a difereça entre criar um


Operador op = new Operador(+);

myCalculadora.Acao( op ) ;

op.algumacoisa();

myCalculadora.Acao( op ) ;

você pode continuar trabalhando com o objeto Operador depois de passalo para o método. Usando objetos anônimos depois daquela linha o seu objeto esta na mira do garbage collector :wink:

Pode, esse é a essencia da orientação a objetos.

[code]public class Operador(){
//corpo da classe
}

public class Calculadora{
public void acao(Operador op){

}
}

Calculadora calc = new Calculadora();
calc.acao(new Operador());[/code]

Não necessariamente, pode ser que haja uma referencia pra ele.

Gostei muito do tópico, me fez aprender bastante, eu gostaria de aproveitar pra perguntar quais as aplicações mais comuns para objetos anonimos?
Obrigado

Só passa-los como parametros, ou acessar um membro sem criar uma variavel, só isso. Pois não há muito o que fazer com um objeto sem uma variavel que o referencie…

ex.:

[code]public class Calculadora{
public double somar(double a, double b){
return a+b;
}
}

double soma = new Calculadora().somar(10d, 20d);[/code]

A ideia a entender é: você não precisa armazenar a referencia em uma variavel para usa-la, só precisa ter em mente que se não armazenar, vai perde-la logo apos o uso.

Entendi… é uma questão de boa engenharia e uma forma de evitar desperdiço. Resumidamente seria isso mesmo?
Abraço.

Primeiramente obrigado a todos que responderam.

Vou fazer um código aqui para colocar em prática o que foi dito nesse tópico…e logo em seguida posto aqui.

Abraços.