这个问题在这里已经有答案了:
java泛型类强制转换异常(3个答案)
上个月关门了。
我目前正在学习java,我似乎不明白为什么会有classcastexception。我在这里看了很多例子,但似乎仍然不能完全理解手头的问题。这是我的密码:
通用列表.java
import java.util.Arrays;
public class GenericList<T extends User> {
private T[] items = (T[]) new Object[10]; // error here on debugging
private int count;
public void add(T item) {
items[count++] = item;
}
public T get(int index) {
return items[index];
}
public String getCompleteUserList() {
return Arrays.deepToString(items);
}
}
用户.java
public class User implements Comparable<User> {
private final String name;
private final int age;
private GenericList<User> userList = new GenericList<>(); // error here on debugging
public User(String name, int age) {
this.name = name;
this.age = age;
userList.add(this);
}
@Override
public int compareTo(User otherUser) {
return this.age - otherUser.age;
}
@Override
public String toString() {
return "Name = " + this.name + "; Age = " + this.age;
}
}
主.java
public class Main {
public static void main(String[] args) {
var user1 = new User("User 1", 25); // error on this line during debugging
var user2 = new User("User 2", 24);
}
}
我试着调试代码,上面的代码中指出了有问题的行。我不明白为什么它会抛出错误呢?我错过了什么?
其思想是将新创建的user对象存储在generic user list items数组中,然后使用getcompleteeserlist方法打印完整的用户列表。
我已经花了两个多小时在这个问题上,但没有结果。我确信这是我在某个地方丢失的最基本最愚蠢的东西,但不知道是什么。
2条答案
按热度按时间aiqt4smr1#
这里的类强制转换异常是因为您使用“扩展”用户的对象模板化了泛型列表。。。在第一个例子中,你尝试将一个不是用户子类的对象分配给它。
应该是
ohtdti5x2#
Object[]
不能强制转换为T[]
自T
删除为User
由于T extends User
束缚。存储Object[]
然后将单个项目投射到T
需要时: