将 Object[] 转换为 ContentValues[] 时出错

Error casting Object[] to ContentValues[]

我正在学习有关内容提供者的教程,在特定代码中,他们使用 bulkInsert 方法插入了一些数据。他们还使用一个 Vector 变量 (cVVector) 来存储所有 ContentValues.

提到的代码:

if (cVVector.size() > 0) {
   ContentValues[] cvArray = new ContentValues[cVVector.size()];
   cVVector.toArray(cvArray);
   mContext.getContentResolver().bulkInsert(WeatherEntry.CONTENT_URI, cvArray);
}

然后,我尝试通过将 cVVector.toArray() 强制转换为 ContentValues[] 来减少代码,但出现错误。

我编辑的代码:

if (cVVector.size() > 0) {
   mContext.getContentResolver().bulkInsert(WeatherEntry.CONTENT_URI, (ContentValues[]) cVVector.toArray());
}

我得到的错误:

FATAL EXCEPTION: AsyncTask #1
Process: com.example.thiago.sunshine, PID: 9848
java.lang.RuntimeException: An error occured while executing doInBackground()
...
Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to android.content.ContentValues[]

最后,我的问题是:为什么我不能在 Object[]ContentValues[] 之间进行转换?

Obs.: 英文不是我的母语,如有错误请见谅。

不能将Object[]转换为ContentValues[],因为这两种类型之间没有关系。它们是不同的数组类型。

就像你可以将 Object 转换为 String 一样:

Object a = "aa";
String b = (String) a;

因为StringObject的子类。

但是你不能这样做:

Object[] ar = new Object[]{"aa", "bb"};
String[] br = (String[]) ar;

你会发现这在编译时没问题,但在运行时就不行了。 JAVA 中的强制类型转换可能仅适用于单个对象而不适用于数组。

您可以将代码替换为:

if (cVVector.size() > 0) {
   mContext.getContentResolver().bulkInsert(WeatherEntry.CONTENT_URI, (ContentValues[]) cVVector.toArray(new ContentValues[1]));
}

希望对您有所帮助。