这是一个简单而且微不足道的问题:在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()
。我必须在那个地方写些什么?
答案 0 :(得分:8)
如果您的函数使用Varargs,这非常简单:
private void yourFunction(String... parameters) {
for (String parameter : parameters) {
// Do something with parameter
}
}
答案 1 :(得分:5)
单个参数不可迭代;你需要一个集合。
如果他们是单独的弦乐,你只需要拿一把铲子。
如果你有很多字符串参数,这是压迫性的,也许你的方法需要重新考虑。所有这些参数都应封装到一个对象中,因为它们是相关的,或者该方法试图做太多。这说明我缺乏凝聚力。
答案 2 :(得分:3)
您尝试解决的任务只能使用AOP(面向方面编程)框架。
AOP框架允许您在不更改方法的情况下向方法添加一些代码。实际上,他们创建了包含原始类的Proxy类,并在绑定它们的每个方法之前执行所需的代码行。
然而,AOP对于一些简单的任务来说太过分了,因为它通常需要一些复杂的配置,并且通常需要与DI框架集成。
如果您仍感兴趣,请参阅以下AOP框架列表:http://java-source.net/open-source/aspect-oriented-frameworks。
修改强>
实际上,我认为你在第一时间以错误的方式完成任务。如果您的方法是业务层的一部分 - 它不应该允许非修剪参数,并在这种情况下抛出某种异常。如果您的方法是某个表示层的一部分 - 它应该手动清理参数,通常在它从用户读取参数的部分附近。
例如,如果您正在从某些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)
答案 3 :(得分:0)
因为您可以将您的方法更改为以下内容,您可以迭代它们。
public void method(String... args)
答案 4 :(得分:0)
如果您的问题是如何识别Object中的String,您可以这样做:
if (myObject instanceof String) {
// My param is a string!
}