List<Object>类型是List<String>的父类吗?
时间: 2023-11-11 18:51:06 浏览: 50
List<Object>类型不是List<String>的父类。尽管String是Object的子类,但是Java中的泛型并不支持向上转型。List<String>和List<Object>是两个不同的类型,它们之间没有继承关系。这是因为泛型在编译期间会进行类型擦除,将泛型类型转化为它们的原始类型,而List<String>和List<Object>的原始类型都是List。因此,无法将List<String>直接赋值给List<Object>。
方法1:
通过遍历将List<String>转为List<Object>:
List<String> sun = Lists.newArrayList("a");
List<Object> father = sun.stream()
.map(e -> (Object)e)
.collect(Collectors.toList());
这样可以完成类型转换,将List<String>中的元素一个一个转换为Object类型,并放入新的List<Object>中。
相关问题
List<object>类型是List<String>的父类吗?
List<Object> 并不是 List<String> 的父类。这是因为泛型在 Java 中是不可协变的。虽然 String 是 Object 的子类,但是 List<String> 不是 List<Object> 的子类。这是因为如果 List<String> 被视为 List<Object> 的子类,那么可能会导致类型安全问题。例如,如果我们将一个 List<String> 的引用赋给一个 List<Object> 的变量,然后尝试将一个非 String 类型的对象添加到该列表中,就会导致类型错误。
所以不能将 List<String> 强制转换为 List<Object>,因为它们是不同的类型。
List<String>怎么强转为List<Object>
在Java中,不可以直接将List<String>强制转换为List<Object>。这是因为泛型在Java中是不可逆的,即使String是Object的子类,List<String>也不是List<Object>的子类。所以在进行强制类型转换时会出现编译错误。
解决方法有两种:
1. 使用遍历将List<String>转换为List<Object>。可以使用Java 8的Stream API来实现,首先将List<String>转为Stream,然后通过map操作将每个元素转为Object,最后使用collect操作将Stream转为List<Object>。
```
List<String> sun = Lists.newArrayList("a");
List<Object> father = sun.stream()
.map(e -> (Object)e)
.collect(Collectors.toList());
```
2. 创建一个新的List<Object>,然后将List<String>中的元素逐个添加到新的List<Object>中。这种方法需要手动遍历List<String>,并将每个元素转为Object,然后添加到新的List<Object>中。
```
List<String> sun = Lists.newArrayList("a");
List<Object> father = new ArrayList<>();
for(String s : sun) {
father.add((Object)s);
}
```