Declaração de atributos (variáveis) dentro de métodos (procedures)

Olá
Trabalho com delphi ja faz algum tempo e por mania, tento comparar as facilidades da minha linguagem, com o java, que é uma linguagem muito interessante e que ainda estou aprendendo. Na verdade sou iniciante mesmo mas, me deparo com algumas coisas que não concordo, coisas que sao facilidades no delphi.

Em delphi, ao declarar variaveis utilizamos uma seção para elas neste formato:
var
i: integer; valor1, valor2: string;

Em java, os atributos demonstrados acima seriam: int i; String valor1, valor2;

Até aqui tudo bem, o problema é na declaração de variáveis(atributos) dentro de métodos (procedures).

Em delphi eu declaro: procedure NOMEDAPROCEDURE (i: integer; valor1, valor2: string;)

Em java, eu não consigo fazer a mesma coisa, ou seja: public NOMEDOMÉTODO (int i, String valor1, String valor2)…

Resumindo, se eu possuir um método que tenha 15/20 atributos do mesmo tipo, vou ter que passar da forma String valor1, String valor2, String valor3, String valor4 …

Existe alguma forma de realizar, em java, a declaração de atributos dentro de métodos, da mesma forma que faço em delphi, ou seja, (valor1, valor2, valor3, valor: String)?, ou seja, declarar o tipo e a seguir os métodos (String valor1, valor2, valor3; int valor4, valor5, valor6; float preco, desconto).

Obrigado

me corrijam se eu estiver errado mais creio q esse seu metodo ai esta errado vc nao definiu o tipo do seu metodo…

public NOMEMETODO ()...

por exemplo:

public boolean NOMEMETODO(parametro)...

Infelizmente não; você tem sim que indicar o tipo de cada parâmetro, mesmo que sejam do mesmo tipo.

Mas se você tem que passar inúmeros parâmetros para seu método, pode ser sinal de que você precisa refatorá-lo.

Olá Jean, você conhece as “inovadoras - estruturas de dados da API do Java”?
Brincadeira :smiley:
Pois bem algumas coisas que o Delphi fornece o Java é mais rigoroso.
A piada acima é referente a flexibilidade que uma Matriz em Java pode te fornecer. Você
pode criar uma matriz de tipos de dados primitivos bem como uma matriz polimórfica.

Olhe a API do Java e em pouco tempo será fácil engrenares no Java:

http://java.sun.com/javase/7/docs/api/

Saudações

Há um modo de passar diversos parâmetros de mesmo tipo para um método ou construtor usando varargs. Assim:

public void meuMetodo(String... params){} 

Dentro do método você trata params como um array de strings. A vantagem sobre o array é que você passa quantos parâmetros forem necessários em cada invocação do seu método.
Mais detalhes em http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html.

Esse exemplo, com enhanced for mostra porque Java é lindo:

class VarGreeter {

       public static void printGreeting(String... names) {
          for (String n : names) {
              System.out.println("Hello " + n + ". ");
          }
       }

       public static void main(String[] args) {
          printGreeting("Paul", "Sue");
       }
   }

Lembrando que varargs e enhanced for surgiram no Java 5 (ou 6, não lembro).

O único problema do varargs é que ele tem que ser usado ao final da lista de parâmetros. Mas isso quase sempre pode ser contornado.

Ola

Agradeço pelas respostas. Realmente eu nao sou um árduo conhecedor das apis do java, até mesmo pq disse no inicio do tópico que sou bem iniciante nessa linguagem.
Já trabalho com delphi a anos, conheço boa parte da api e tento de alguma forma reaproveitar o meu conhecimento das coisas praticas que tenho la para transportar para esta linguagem.

O pessoal não entendeu o meu tópico. Varargs é bem interessante, mas dentro de um mesmo método só me permite declarar um array para um unico tipo.
QUando eu falo em declaração, seria varios atributos do mesmo tipo com a declaração deste tipo. Depois algum separador, outro tipo de declarado e sua listagem de atributos e assim por diante.
Tudo isso dentro do mesmo método.

Obrigado

[quote=J-Chist]Há um modo de passar diversos parâmetros de mesmo tipo para um método ou construtor usando varargs. Assim:

public void meuMetodo(String... params){} 

Dentro do método você trata params como um array de strings. A vantagem sobre o array é que você passa quantos parâmetros forem necessários em cada invocação do seu método.
Mais detalhes em http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html.[/quote]

É uma mão na roda… mas tem que ser usado com carinho.
Senão vira um belo exemplo do Gambi Pattern “Black Cat in a Dark Room”.

Programar, tu programa… depois chama um jagunço do Lampião pra debuggar.

Só pra ficar claro: o que não pode é usar isso como uma forma de passar valores a esmo… se for só pra ‘economizar’ código, lembre-se que a legibilidade do código cai bastante com esse tipo de artifício.

Desisto, ou eu não sei me expressar em palavras textuais ou realmente não posso ocupar as facilidades do delphi numa linguagem desse nivel.
Obrigado,

Jean, realmente não dá. Terias que especificar um a um OU usar varargs, mas eu não aconselho.
Resumindo, é isso.

Se vc tem um método com mais de 4 argumentos algo está muito errado com esse método.
Portanto, na prática o problema não acontece porque os métodos têm poucos argumentos.

além disso a posição do argumento na assinatura não é aleatória.Existem regras para isso por causa da sobrecarga.
Logo a declaração à lá delhpi simplesmente não é util em java.

Mesmo a declaração de atributos ,embora possivel, nunca é usada e é até considerado uma má prática.

[quote]Se vc tem um método com mais de 4 argumentos algo está muito errado com esse método.
Portanto, na prática o problema não acontece porque os métodos têm poucos argumentos.

além disso a posição do argumento na assinatura não é aleatória.Existem regras para isso por causa da sobrecarga.
Logo a declaração à lá delhpi simplesmente não é util em java.

Mesmo a declaração de atributos ,embora possivel, nunca é usada e é até considerado uma má prática. [/quote]

Falou tudo maninho…
A posição do argumento na assinatura é crucial, por isso o modelo delphi morreu com ele.

Realmente não dá para declarar parâmetros do jeito que quer, tem que ser um a um, como explicaram.

Se quiser passar 15 argumentos do mesmo tipo, vai ter que declarar 15 parâmetros.

Na prática mesmo, nem é bom fazer isso, encapsule teus parâmetros em objetos, e passe eles para os métodos. Você ganha mais fazendo assim.