我有三种方法。一个从文件中读取并将每一行作为对象添加到列表中。另一个要求一行并将其删除。这部分很好。
但是,这是针对它要求打印要删除的行的作业。这就是我遇到一点麻烦的地方。现在在我的删除一行的方法中,我有这个:
Trees objToRemove = list.get(number);
System.out.println("Removing: " + objToRemove);
我试图从指定位置(数字)的列表中获取对象。
我收到此错误
不兼容的类型:对象无法转换为树。
树是,
Trees tree = new Trees (name, height, diameter);
位于提到的第一种方法中。
我的问题是,如果在另一种方法中定义了该对象,我如何访问该对象?另外,我目前做错了什么?
编辑:更改为
Trees objToRemove = (Trees) list.get(number);
它有效!
谢谢。
您的
ArrayList
类不是类型安全的。因此,默认情况下,get(int index)
将为您提供Object
类的对象。
Trees objToRemove = (Trees) list.get(number); //try this
而不是
Trees objToRemove = (Trees) list.get(number);
或者将list
对象更改为类型安全对象,以便无法将其他类型的元素添加到List
。
List<Trees> list = new ArrayList<Trees>(); // now no type Casting Needed.
Trees objToRemove = list.get(number); // This code will Work Fine if You use a Type-Safe ArrayList.
还有其他各种原因 在这里查看 为什么使用泛型
当您实例化列表时,而不是:
List list = new ArrayList<Trees>();
将类型放在另一侧,如下所示:
List<Trees> list = new ArrayList();
第一种方式返回Object
,第二种返回特定类型
Trees objToRemove = list.get(number);
您正在将对象分配给不兼容的 Trees 类。你需要投射它。
Trees objToRemove = (Trees) list.get(number);