ArrayList.toArray()没有转换为正确的类型?

was*_*sup 2 java arraylist

所以,我得到的是:

class BlahBlah
{
    public BlahBlah()
    {
        things = new ArrayList<Thing>();
    }

    public Thing[] getThings()
    {
        return (Thing[]) things.toArray();
    }

    private ArrayList<Thing> things;
}
Run Code Online (Sandbox Code Playgroud)

在另一堂课中,我得到了:

for (Thing thing : someInstanceOfBlahBlah.getThings())
{
    // some irrelevant code
}
Run Code Online (Sandbox Code Playgroud)

错误是:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LsomePackage.Thing;
at somePackage.Blahblah.getThings(Blahblah.java:10)
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

NPE*_*NPE 8

尝试:

public Thing[] getThings()
{
    return things.toArray(new Thing[things.size()]);
}
Run Code Online (Sandbox Code Playgroud)

你的原始版本不起作用的原因是toArray()返回Object[]而不是Thing[].你需要使用另一种形式toArray- toArray(T[])- 来获得一个数组Things.

  • `.size()` 而不是 `.length`。否则+1 (2认同)