我使用需要包含不同对象类型的ArrayList,并且我无法访问对象方法,除非将ArrayList设置为一种特定类型。我该怎么做?如果有更好的解决方案(我需要使用链接列表类型的数据结构),那么我最好使用哪种方式?
以下代码是一个示例代码,用于显示我的意思。 此代码有效:
public static void main(String[] args) {
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(new Integer(3));
arr.get(0).floatValue();
}
这不起作用:
public static void main(String[] args) {
ArrayList<Object> arr = new ArrayList<Object>();
arr.add(new Integer(3));
arr.get(0).floatValue();
}
答案 0 :(得分:0)
arr.get(0)
将返回Object
类型的引用,而不是Integer
。您遇到编译时错误,因为Object
类没有名为floatValue()
的方法。
要解决此问题,您需要在对象上调用(Integer)
方法之前添加强制转换floatValue()
。
这样的事情:
((Integer) arr.get(0)).floatValue();
答案 1 :(得分:0)
将它们存储为对象,然后在检索每个对象时进行投射。这可能有点错误,我不建议你这样做。确实你可以这样做。只记得订单和你放的类型在那里
答案 2 :(得分:0)
在第二个代码中使用类似的演员:
public static void main(String[] args) {
ArrayList<Object> arr = new ArrayList<Object>();
arr.add(new Integer(3));
((Integer)arr.get(0)).floatValue();
}
此外,如果您不确定某个条目是否属于特定类型,请使用instanceof
进行检查,如:
if(arr.get(0) instanceof Integer)
{
((Integer)arr.get(0)).floatValue();
}
答案 3 :(得分:0)
如果您知道类型,可以直接投射:
((Integer) arr.get(0)).floatValue();
如果Object
不是整数,您将获得ClassCastException
。
答案 4 :(得分:0)
第二个示例中的get
方法将返回一个Object(如在java.lang.Object中),并且它没有floatValue()
方法。
您可以通过强制转换返回的对象来解决此问题:
((Integer) arr.get(0)).floatValue();
这会在大多数IDE中发出unchecked cast
警告。因此,除非您想要检查每个对象的正确类型,否则应首选第一个示例。