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规则?
答案 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
编写多个重载版本。