Java中有没有办法将多个参数对传递给方法?

时间:2013-01-05 14:10:53

标签: java recordset

Java新手

我希望能够以下列方式使用方法;

class PairedData {
    String label;
    Object val:
}


public void myMethod(String tablename, PairedData ... pD) {
    /* 
    insert a record into a table -tablename with the various fields being
    populated according to the information provided by the list of 
    PairedData objects
    */
}

myMethod("firststring",{"field1",Date1},{"field2",12},{"field3","aString"});

我意识到语法无效但我希望它能给出我想要做的事情的要点。

我要做的是直接传递数据而不是填充类的实例然后传递它们。这是可能的,还是我只想破坏大量的OOP规则?

4 个答案:

答案 0 :(得分:2)

您可以使用Object数组执行此操作:

public void myMethod(String tableName, Object[] ...pairs)

并以这种方式调用此方法:

myMethod("someTable", new Object[] {"field1", date1}, new Object[] {"field2", date2});

答案 1 :(得分:2)

不,你真正想做的事情是不可能的。在我看来,将类的实例传递给方法会好得多,而不是像使用这样的数组进行复杂的操作。另一个答案建议使用Object[] varargs参数 - 这可能是您在实现类似于示例中显示的最接近的参数。另一种选择(我认为更好的选择)将是

public void myMethod(String tablename, String[] labels, Object[] vals) {

您可以为这些数组中的每个labels[i]vals[i](将它们配对)实例化您的类。换句话说,在你的方法中你可以有类似

的东西
pD = new PairedData[labels.length];

for (i = 0; i < labels.length; i++)
    pD[i] = new PairedData(labels[i], vals[i]);  // assuming you
                                                 // added this
                                                 // constructor

然后,您包含的方法调用示例将转换为

myMethod("firststring", new String[]{"field1", "field2", "field3"}, 
                                             new Object[]{date1, 12, "aString"});

答案 2 :(得分:1)

...通常

你会为所有参数创建一个包含变量的类。 那么你将构建该类的实例并填充值。

然后您可以使用该类实例来传递它们。

如果你想要一大堆...然后制作一个Collection(Map,HashMap,List等)并传递它。

答案 3 :(得分:0)

如果你问我,似乎是未来语言扩展的好例子。但是通过稍微改变你调用方法的方式,我们应该能够接近......

myMethod("someTable", 
  new PairedData("field1", date1), 
  new PairedData("field2", date2)
);

它更类型化,但它可能是最安全的,因为它是类型安全的,并且不容易出现匹配对。

您还需要为'PairedData(String label,Object val)编写构造函数,我建议为您计划存储的每种val编写多个重载版本。