我想编写一个能让我执行以下操作的函数
NameObj1=ValueObj1, ..., NameObjN=ValueObjN
我传递给函数的所有对象都有toString()
方法。
示例:
double x=1.1; int y=2; ClassA a
theFunction(x,y,a)
=> this would output "x=1.1, y=1, a=[whatever a.toString() output]"
这可能吗?
答案 0 :(得分:1)
这里有点接近:
你可以像这样写一个var-arg函数:
public static String describeArguments (Object... arguments) {
StringBuilder output = new StringBuilder();
int counter = 1;
for (Object argument : arguments) {
output.append("object #").append(counter++).append(": ").append(argument.toString());
}
return output.toString();
}
严格来说,方法参数没有名称。你可以使用反射检索参数参数名称,如果符号表没有被删除@compile时间,但是它的野蛮和丑陋。
答案 1 :(得分:1)
没有办法让你写的是变量的“名称”,因为引用它的唯一方法就是它本身,并且不可能通过值。
答案 2 :(得分:1)
正如其他答案和评论中所提到的,没有“对象的名称”。但是,如果您感兴趣的对象是一个类的所有字段,您可以编写一个函数,该函数使用反射来访问该对象字段并打印它们的名称。
看看reflection tutorial。还有一个非常接近你可能想到的例子。
答案 3 :(得分:0)
您可以创建一个类似
的地图 Map<String,Object> map= new HashMap<String,Object>();
map.put("x", 1.1);
map.put("y",2);
map.put("a", MyClass.class);
并致电theFunction(map)
,其中函数为:
public void theFunction(HashMap<String,Object> list) {
StringBuilder sb = new StringBuilder();
for(String key:list.keySet()) {
try {
Object currentObject = list.get(key);
sb.append(key+"="+currentObject.getClass().getMethod("toString").invoke(currentObject)+" ");
}
catch(Exception e){}
}
System.out.println(sb.toString());
}