Android 将对象[]强制转换为内容值[]时出错

Android 将对象[]强制转换为内容值[]时出错,android,casting,content-values,Android,Casting,Content Values,我正在学习一个关于内容提供商的教程,在一个特定的代码中,他们使用bulkInsert方法插入了一些数据。他们还使用一个向量变量(cVVector)来存储所有内容值 提到的代码: if (cVVector.size() > 0) { ContentValues[] cvArray = new ContentValues[cVVector.size()]; cVVector.toArray(cvArray); mContext.getContentResolver().bul

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

提到的代码:

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 a = "aa";
String b = (String) a;
因为
String
对象的子类

但你不能这样做:

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]));
}

希望这能对你有所帮助。

它帮助很大。我感到困惑,因为我认为强制转换会自动运行数组,将每个对象强制转换到新数组中。但是,正如您所说,
Object[]
ContentValues[]
是不同的数组类型,因此我所做的转换永远不会正常工作。再次感谢你!