一次在项目中写了如下代码,编译通过,运行时却报错
public void testToArray(){
List<String> names = new ArrayList<String>();
names.add("JAY");
String[] nameArray = (String[])names.toArray();
}
出错信息:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at yong.li.mianshi.ToArray_Test.main(ToArray_Test.java:105)
当时觉得不可思议:
代码里names明明是List<String>类型的,所以names.toArray()返回的Object[]理所应
当是String[]向上转型得到的,所以(String[])names.toArray()打死都不应该报错。但事后我发现我有点想当然
了,红色标注的话是我自己想太多了,其实:
Object[] nameObjArray = names.toArray();
测试nameObjArray能不能向下转型成String[],最简单粗暴的方法就是用instanceof
if(!nameObjArray instanceof String[]){
System.out.println("不可以转,你有点想多了!");
}else{
System.out.println("可以转!");
}
程序运行进入到if的第一个分支中去,所以不能拿toArray()返回的结果直接强转成String[].原因就是list的
toArray()返回的Object[]类型的结果并不是由String[]向上转型或类似的做法得到。但不能就由此下结论,认
为Objecgt[] 不能强转成String[],例如:
String[] names = {"JAY"};
Object nameObjArray = (Object[])names;
这个时候nameObjArray就可以直接强转回到它原来的String[]类型了。
从某个角度来说,数组也是对象,数组类型的转换,跟一般的对象类型的转换是一样的。Object[] 的类型
是:[Ljava.lang.Object ,而String[]的类型是 [Ljava.lang.String,如果一个[Ljava.lang.Object 类型的实例并
不指向[Ljava.lang.String类型的对象,强转肯定报错,这与Object与String的关系是一样的:Object obj =
new Object; String str = (String)obj,肯定要报错!
我今天才知道String型数组的类型是用“[Ljava.lang.String”,数组类型的表示:
a." [ "表示一维数组,"[[ "二维数组
b. "L"代表这个数组是引用数据类型的数组. "java.lang.String"是数组元素的类型,标识这个数组是什么类型
的数组.基本数据类型的每种类型都有自已对应的标识符,如int[] 的类型是"[I"表示它是int型的数组
分享到:
相关推荐
这个方法用于将List集合中的元素转换成一个Object数组。在深入讲解之前,我们需要理解Java集合框架的基础,它包括Set、List和Map等接口,以及它们的实现类,如ArrayList、LinkedList和HashMap等。 List接口是...
首先,我们来看如何将一个Java对象数组转换成JSON格式。这通常涉及到使用第三方库如`fastjson`、`Jackson`或`org.json`等。这里以`org.json`为例进行说明: ```java import org.json.JSONArray; PricingRangeDTO[]...
当需要将List转换回数组时,ArrayList提供两种方法:`toArray()`和`toArray(T[] a)`。 - `toArray()`方法: 此方法返回一个新的数组,包含List中的所有元素。数组的类型是Object[],因此可能需要进行类型转换。...
2. **数组转换成List** 将数组转换为List,可以使用`Arrays.asList()`方法。在Java 1.5及以上版本,这个方法支持对象数组和基本类型的数组。但是,对于基本类型的数组,`Arrays.asList()`会将整个数组作为一个元素...
Java编程实现数组转成list及list转数组的方法 Java编程实现数组转成list及list转数组的方法是Java编程中的一种常见操作。数组和List都是Java中常用的数据结构,数组是固定大小的数据结构,而List是可变大小的数据...
这里需要注意,如果你直接将List转换为非Object类型的数组,如`String[]`,而不先创建一个目标类型的数组,会导致`ClassCastException`,因为`toArray()`默认返回`Object[]`,而不能直接转换为其他类型。 现在,...
对于存储对象的数组,可以先将其转换为ArrayList,然后利用Collections的reverse()方法进行倒置,最后再转换回数组。这种方法比较方便,但会涉及到额外的内存分配。 ```java import java.util.ArrayList; ...
例如,`list.toArray()`和`list.toArray(new String[0])`。 对于Map转换为Collection,可以直接使用`Map.values()`方法,它返回一个包含Map中所有值的Collection。如果你想得到一个特定类型的List或Set,可以进一步...
// 将List转换为特定类型的数组,如String数组 String[] stringArray = list.toArray(new String[0]); ``` 这里需要注意,`toArray()`方法如果没有指定参数,返回的是`Object[]`类型,如果需要特定类型的数组,需要...
Dim array As Object() = list.ToArray() ``` ### 5. 一维与多维数组 VB支持一维数组和多维数组。一维数组就像一个线性的列表,而多维数组可以表示矩阵或表格数据。例如,初始化一个2x2的二维数组: ```vb Dim ...
- `JSONArray.toArray()`:将JSON数组转换为Java数组。 2. com.google.gson库: - Gson类:核心类,提供序列化和反序列化的功能。 - `Gson.toJson(Object)`:将Java对象转换为JSON字符串。 - `Gson.fromJson...
return (String[])list.toArray(new String[list.size()]); } public static void main(String[] args) { String[] ar = {"dd","cc","ee","ff","gg","cc","ee"}; String[] s = array_unique(ar); for(String ...
Object[] objects = jsonArray.toArray(); List list = new ArrayList(); for (Object object : objects) { jsonObject = JSONObject.fromObject(object.toString()); list.add(JSONObject.toBean(jsonObject, ...
return JSONArray.toArray(JSONArray.fromObject(jsonString)); } ``` 以上就是Java中XML、List、Map与JSON之间转换的基本实现。需要注意的是,这些示例都是基于`json-lib`库,实际应用中可能还需要根据具体需求...
该方法用于将JSON字符串转换为Map,其中键值对可以是任意类型的数据,包括其他Map或List。这种方法特别适用于处理复杂的嵌套JSON结构。 ```java public static Map getMap4Json(String jsonString) { JSONObject ...
注意:对于基本类型的数组,需要先转换成 wrapper 类型的数组。 ``` Integer[] numbers = {7, 7, 8, 9, 10, 8, 8, 9, 6, 5, 4}; List list = Arrays.asList(numbers); Set set = new HashSet(list); ``` 五、结论 ...
在上面的代码中,我们使用了Apache Commons Lang库的ArrayUtils.toPrimitive()方法将Object数组转换为基本类型数组。这是因为Java的toArray()方法返回的是Object数组,而我们通常希望得到的是基本类型数组。 除了...
错误示例中,直接使用无参的`toArray()`方法会返回一个Object[],强制转换为其他类型数组会导致`ClassCastException`。正确的做法是使用泛型,如下所示: ```java List<String> list = new ArrayList<String>(); ...
List<String> names = people.stream().map(Person::new).collect(Collectors.toList()); ``` #### 5. 接口的默认方法和静态方法 JDK 8 允许在接口中定义默认方法(使用 `default` 关键字)和静态方法(使用 `...