Итерация по параметрам метода - PullRequest
9 голосов
/ 10 декабря 2010

Это простой и, может быть, тривиальный вопрос: в Java, как я могу перебрать параметры, передаваемые методу, в котором я работаю?

Мне нужно trim() для всех из них, которые являются строками.

РЕДАКТИРОВАТЬ

Чтобы быть более точным пример использования может быть таким (записан в псевдокоде, отражающем, как я хочу, чтобы это работало):

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())

Дело в том, что getThisMethod().getParameters().Что я должен написать в этом месте?

Ответы [ 5 ]

8 голосов
/ 10 декабря 2010

Если ваша функция использует Varargs , это довольно просто:

private void yourFunction(String... parameters) {
  for (String parameter : parameters) {
    // Do something with parameter
  }
}
5 голосов
/ 10 декабря 2010

Отдельные параметры не повторяются;вам нужна коллекция для этого.

Вам нужно будет просто получить лопату, если они являются отдельными строками.

Если у вас так много параметров строки, что это может привести к неприятным последствиям, возможно, ваш метод необходимо пересмотреть.Либо все эти параметры должны быть заключены в объект, потому что они связаны, либо этот метод пытается сделать слишком много.Это говорит об отсутствии сплоченности для меня.

3 голосов
/ 10 декабря 2010

Задача, которую вы пытаетесь решить, возможна только с использованием сред AOP (Aspect Oriented Programming).

Среды AOP позволяют добавлять некоторый код в метод, не изменяя его.На самом деле они создают прокси-классы, которые обертывают ваши исходные классы и выполняют необходимые строки кода перед каждым привязанным к ним методом.

Однако AOP является излишним для некоторых простых задач, поскольку обычно требует некоторых сложных конфигураций иобычно интеграция с DI-фреймворками.

Вот некоторый список AOP-фреймворков, если вы все еще заинтересованы: http://java -source.net / open-source / аспектно-ориентированные-фреймворки .

Редактировать:

На самом деле, я думаю, что вы, в первую очередь, делаете свою задачу неправильно.Если ваш метод является частью бизнес-уровня - он не должен разрешать необрезанные параметры и генерировать какое-то исключение в этом случае.Если ваш метод является частью какого-либо уровня представления - он должен очищать параметры вручную, обычно рядом с той частью, где он читает параметры от пользователя.

Например, если вы читаете эти параметры из какой-либо формы Swing, тогда вы должны обрезать их, прежде чем переходить к вашему конструктору.Например:

Ваш текущий код:

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

Как с ним обращаться:

int someId = Integer.valueOf(idField.getText());
String someName = nameField.getText().trim();
String someArg = argField.getText().trim();
new Constructor(someId, someName, someArg)
0 голосов
/ 10 декабря 2010

Если ваш вопрос заключается в том, как распознать строку из объекта, вы можете сделать это:

if (myObject instanceof String) {
  // My param is a string!
}
0 голосов
/ 10 декабря 2010

Поскольку вы можете изменить свой метод следующим образом, вы можете перебирать их.

public void method(String... args)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...