3

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

4 回答 4

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"});
于 2013-01-05T14:22:52.520 回答
2

您可以通过使用 Object 数组来做到这一点:

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

并以这样的方式调用此方法:

myMethod("someTable", new Object[] {"field1", date1}, new Object[] {"field2", date2});
于 2013-01-05T14:13:35.603 回答
1

通常...

您将创建一个包含所有参数变量的类。然后您将构建该类的实例并填充值。

然后你可以使用那个类实例来传递那些。

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

于 2013-01-05T14:13:50.790 回答
0

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

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

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

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

于 2017-10-02T03:45:56.037 回答