如何在java中创建一串对象名称

时间:2014-03-06 09:26:53

标签: java string parsing

我想编写一个能让我执行以下操作的函数

  1. 输入:任意类型的可变数量的对象
  2. 输出:一个字符串NameObj1=ValueObj1, ..., NameObjN=ValueObjN
  3. 我传递给函数的所有对象都有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]"
    

    这可能吗?

4 个答案:

答案 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());
   }