Java ArrayList混合对象类型,无法访问方法

时间:2014-06-05 10:01:58

标签: java arraylist

我使用需要包含不同对象类型的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();
} 

5 个答案:

答案 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警告。因此,除非您想要检查每个对象的正确类型,否则应首选第一个示例。