Gostaria de usar uma variável num método, mais ou menos assim:
public static void testVar(int var) {
var = 10;
}
ai quando chama o metodo;
int i = 0;
testVar(i);
System.out.println(i); //Imprime 10
pareçe babaca, mas é só um exemplo.
Gostaria de usar uma variável num método, mais ou menos assim:
public static void testVar(int var) {
var = 10;
}
ai quando chama o metodo;
int i = 0;
testVar(i);
System.out.println(i); //Imprime 10
pareçe babaca, mas é só um exemplo.
coloca o retorno do método como um int, você está definindo como sem retorno(void):
public static int testVar(int var){
e dentro do método, retorna este int:
var = 10;
return var;
mas naum tem como fazer igual no pascal?
procedure testVar(var i : integer)
begin
i := 10;
end;
pois eu preciso veerificar a variáveis e depois atribui-la.
Gostaria de usar uma variável num método, mais ou menos assim:public static void testVar(int var) { var = 10; } ai quando chama o metodo; int i = 0; testVar(i); System.out.println(i); //Imprime 10pareçe babaca, mas é só um exemplo.
java passa parametros por valor, não por referencia.
dentro do metodo vc ta modificando o valor do parametro do metodo, não da variavel externa.
acho que tem um tutorial aqui no guj falando sobre isso, da uma procurada.
[]'s
bom, de qualquer forma orbigado, tive q procurar outra solução.
valeu a todos.
Usa Delphi mesmo deixa essa porcaria lixo merda de Java pra lá :twisted: :twisted: :twisted: :twisted:
jgbt, mas até objetos são por valor?
E se eu precisar retornar um int, um float, um PastaDeDente, um Toddynho, tudo de uma vez, como faço?
Não vale dizer “ah, você está com erro de modelagem”
Se você quiser fazer isso, aí basta retornar um DTOdoMetodoQueFazTudoNoMeuSistema
sim, uma copia do valor.
[]'s
Po num zoa hehehehhe
da uma olhada aqui p/ vc ver…
[]'s
Bom, nos meus tempos de Java 1.0, o pessoal ensinava a seguinte gambiarra:
static void soma (int[] x, int y) {
x[0] = x[0] + y;
}
public static void main(String[] args) {
int[] x = new int[1];
x[0] = 10;
soma (x, 20);
System.out.println (x[0]); // imprime 30
}
Vê que dá um pouco de mão de obra para fazer algo parecido com um “parâmetro passado por referência…”
Mas dependendo do seu problema até funciona.
Obviamente recomendo os tais dos DTOs, que são uma maneira mais organizada de fazer tais coisas. (Um parâmetro ainda dá, dois já começa a complicar, 10 já é o caso de chamar a polícia).
Conclusão essa porcaria de Java num tem parâmetro por valor e como desculpa esfarrapada temos que usar gambiarras idiotas com nomes elegantes e nos achar super cool :twisted: :twisted: :twisted: :twisted:
PS: Não acho DTO um termo bem apropriado, mas dá pra aturar. Que tal PO (Package Objetc) heheheheh
jgbt, valeu pelo link, tô dando uma lida!!!
Essa é a questão, não é pra você usar caso for estupidamente necessário.
Se seu método precisa retornar coisas demais, talvez ele esteja fazendo coisas demais.
Ao invés de ter um método fazTudoNoMeuSistema(), você pode ter dezenas de outros cada um fazendo uma parte e retornando o que é necessário.
Mas Rafael, em vez de ficar fazendo gambiarra, a linguagem podia ter parâmetro por referência. Simples. Mas como não tem, a gente “não pode criticar”, portanto vamos dizer por aí que “variáveis de referência não são elegantes, são a pior coisa que inventaram etc etc etc”.
PS: alguém vai se ofender com isso 
static void soma (int[] x, int y) { x[0] = x[0] + y; } public static void main(String[] args) { int[] x = new int[1]; x[0] = 10; soma (x, 20); System.out.println (x[0]); // imprime 30 }
Arrays não são passados por valor? Acho que uma solução mais ou menos seria usar os wrappers dos primitivos:
static void soma (Integer x, int y) ...
Não funciona porque não existe um método Integer.setInt.
Os wrappers são objetos “imutáveis”, ou seja, se um Integer foi criado com o valor 10, ele vai ficar assim até morrer.
Além disso a referência para o array é que é passada por valor; o array em si não é clonado ou copiado. É por isso que a tal gambiarra funciona.
Podes crer Thingol, esqueci desse detalhe. Bom então reformulando a solução mais ou menos, poderia-se criar wrappers mutáveis. E sobre os arrays, eu compreendi, eles são objetos (ou pelo menos têm o seu comportamento nesse caso).
Se não me engano existem uns “wrappers” mutáveis nalgum daqueles pacotes org.omg.corba.* que servem para poder interfacear programas Java com escritos em outras linguagens, que aceitam parâmetros passados por referência. Mas o uso é muito restrito, acho que só aparecem naqueles programas gerados automaticamente pelo idlj.