关于包装我的varargs参数的困惑

时间:2015-03-01 19:45:47

标签: java android sqlite variadic-functions activeandroid

在我的ActiveAndroid ORM数据库中编译我的类时,我遇到了这个错误:

警告:(33,50)非varargs调用varargs方法,最后一个参数的参数类型不精确; 转换为Object以进行varargs调用 转换为Object []以进行非varargs调用并禁止此警告

这是指的方法:

public static ChildMedicine getChildMedicine(Child child, Medicine medicine)
{
return new Select()
        .from(ChildMedicine.class)
        .where("Child = ? AND Medicine = ?", new Long[]{child.getId(), medicine.getId()})
        .executeSingle();
}

我想从ActiveAndroid ORM数据库表中返回所有ChildMedicine对象,其中Child列等于传入的子参数的Long Id,而Medicine列等于传入的医学参数的Long Id。

我建议用这样的显式数组创建wrap vararg参数:

public static ChildMedicine getChildMedicine(Child child, Medicine medicine)
{
return new Select()
        .from(ChildMedicine.class)
        .where("Child = ? AND Medicine = ?", new Object[]{new Long[]{child.getId(), medicine.getId()}})
        .executeSingle();
}

但是,这会不会导致我的Select()方法无法正常工作,因为我现在有一个包含两个Long数组的数组,而不是方法where部分的两个Long数组?

我有点困惑!

非常感谢任何帮助...

谢谢, 萨姆

1 个答案:

答案 0 :(得分:1)

如果不知道where方法的签名,我无法确定,但看起来你需要的是:

return new Select()
        .from(ChildMedicine.class)
        .where("Child = ? AND Medicine = ?", new Object[]{child.getId(), medicine.getId()})
        .executeSingle();

这假设where的签名是where (String str, Object... params)

应该有效的另一种选择:

return new Select()
        .from(ChildMedicine.class)
        .where("Child = ? AND Medicine = ?", child.getId(), medicine.getId())
        .executeSingle();
  

我建议用显式数组创建包装wrap vararg参数

不,那不是你的建议。建议您将ObjectObject[]传递给where,具体取决于您是希望将Long[]视为单个参数还是多个参数。传递包含单个Object[]元素的Long[]毫无意义。