2010-12-10 22 views
9

Es una pregunta simple y quizás trivial: en Java, ¿cómo puedo repetir los parámetros pasados ​​al método en el que estoy trabajando?Iterar a través de los parámetros del método

Lo necesito para trim() todos ellos son cadenas.

EDITAR

Para ser más precisos un ejemplo de uso puede ser este (escrito en un pseudo-código que refleja cómo deseo que funcione):

public void methodName(String arg1, int arg2, int arg3, String arg4, double arg5) 
    for(Object obj : getThisMethod().getParameters()) 
     System.out.println(obj.getName() + " = " + obj.toString()) 

El punto es que getThisMethod().getParameters(). ¿Qué debo escribir en ese lugar?

+0

La forma de declaración de método se parece? – Mot

+2

¿por qué los necesitas? si conoce el nombre de los parámetros, puede hacerlo en la parte superior de su método. – Singleton

+2

Mi método es un constructor simple con muchos campos, pero la pregunta es válida para cualquier método, en el que deseo hacer algo con todos los parámetros. Sería útil escribir un código simple y elegante y no cambiarlo cada vez que agregue/modifique/elimine un parámetro. – bluish

Respuesta

5

Los parámetros individuales no son iterables; necesitarías una colección para eso.

Tendrás que conseguir una pala si son cuerdas individuales.

Si tiene tantos parámetros de Cadena que esto es opresivo, tal vez su método necesita ser repensado. O bien todos esos parámetros deben encapsularse en un objeto, porque están relacionados, o ese método está tratando de hacer demasiado. Me habla de una falta de cohesión.

+0

Gracias! Desde ahora su respuesta parece ser la más correcta, incluso si está desilusionada :) Sin embargo, mi método es un constructor, le paso muchos campos que deben guardarse en un registro DB. Me pregunto: ¿qué es una "pala"? Nunca lo escuché asociado con Java .. – bluish

+4

"obtener una pala" es una expresión que significa "arremangarse y ponerse a trabajar". Por lo general, aparece cuando un desarrollador se enfrenta a una gran tarea tediosa que requiere un gran esfuerzo y paciencia para completar en lugar de poder bruto bruto. – duffymo

0

Para que pueda cambiar su método para que sea el siguiente puede iterar sobre ellos.

public void method(String... args) 
+1

... siempre y cuando las cadenas de las que habla el OP sean pensadas como un grupo. El OP no debe agruparlos simplemente por el simple hecho de ser capaz de iterar convenientemente a través de ellos. –

+0

Una solución más sencilla pero también épicamente fallida sería pasar un Mapa de parámetros e iterar sobre él :) – bezmax

+0

@Bert, esto es cierto. Sin embargo, la necesidad de recortar() todas las cadenas sugirió que podría ser un grupo de cadenas. –

0

Si su pregunta es cómo reconocer una cadena de un objeto, puede hacer lo siguiente:

if (myObject instanceof String) { 
    // My param is a string! 
} 
7

Si su función utiliza Varargs esto es bastante sencillo:

private void yourFunction(String... parameters) { 
    for (String parameter : parameters) { 
    // Do something with parameter 
    } 
} 
+1

... siempre que las cadenas de las que habla el OP _deben considerarse como un grupo. El OP no debe agruparlos simplemente por el simple hecho de ser capaz de iterar convenientemente a través de ellos. –

+1

No puedo usar esto porque mis parámetros necesitan un nombre diferente cada uno. Usar una matriz o similar complicaría la situación. – bluish

+0

Iba a sugerir varargs .... –

3

El La tarea que está intentando resolver solo es posible utilizando los marcos AOP (Programación Orientada a Aspectos).

Los marcos AOP le permiten agregar algún código al método sin cambiarlo. En realidad, crean clases Proxy que envuelven sus clases originales y ejecutan las líneas de código requeridas antes de cada método que usted las vincula.

Sin embargo, AOP es una tarea exagerada para algunas tareas simples, ya que generalmente requiere algunas configuraciones complejas y generalmente integración con marcos DI.

Aquí hay una lista de marcos AOP si todavía está interesado: http://java-source.net/open-source/aspect-oriented-frameworks.

Editar:

En realidad, pienso que usted está haciendo su tarea de forma errónea en primer lugar. Si su método es parte de Business Layer, no debe permitir parámetros no recortados y arrojar algún tipo de excepción en ese caso. Si su método es parte de una capa de presentación, debe limpiar los parámetros manualmente, generalmente cerca de la parte donde lee los parámetros del usuario.

Por ejemplo, si está leyendo esos parámetros desde alguna forma Swing, entonces debe recortarlos antes de pasar a su Constructor.Por ejemplo:

su código actual:

int someId = Integer.valueOf(idField.getText()); 
String someName = nameField.getText(); 
String someArg = argField.getText(); 
new Constructor(someId, someName, someArg) 

¿Cómo se debe manejar:

int someId = Integer.valueOf(idField.getText()); 
String someName = nameField.getText().trim(); 
String someArg = argField.getText().trim(); 
new Constructor(someId, someName, someArg) 
+0

Su parte de edición es una buena observación, ¡gracias! Sin embargo, me gustaría encontrar una manera de hacer exactamente lo que dije ... es como un desafío contra Java;) – bluish

+0

Bueno, si lo quieres fácil, Java no puede hacer eso. No puede iterar sobre los parámetros del método. Además, tampoco puedes acceder a variables locales con reflexión. Entonces, lo único que puede hacer es AOP o algo similar que puede controlar todas las llamadas al método específico de una clase. – bezmax

Cuestiones relacionadas