make arrayList.toArray()返回更具体的类型

kam*_*lot 178 java arrays types arraylist object

所以,通常ArrayList.toArray()会返回一种类型Object[]....但是假设它是一个 Arraylist对象Custom,我该怎么做toArray()才能返回一种Custom[]而不是Object[]

Mih*_*der 291

像这样:

List<String> list = new ArrayList<String>();

String[] a = list.toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)

在Java6之前,建议写:

String[] a = list.toArray(new String[list.size()]);
Run Code Online (Sandbox Code Playgroud)

因为内部实现无论如何都会重新分配一个大小合适的数组,所以你最好先做好.由于Java6是首选的空数组,请参阅.toArray(new MyClass [0])或.toArray(new MyClass [myList.size()])?

如果您的列表没有正确输入,则需要在调用toArray之前进行强制转换.像这样:

    List l = new ArrayList<String>();

    String[] a = ((List<String>)l).toArray(new String[l.size()]);
Run Code Online (Sandbox Code Playgroud)

  • @pbs你不能.Java的泛型仅支持引用类型,而不支持基元.不过,自动装箱/拆箱应该让你忽略它们之间的差异. (2认同)

lim*_*imc 14

它实际上不需要返回Object[],例如: -

    List<Custom> list = new ArrayList<Custom>();
    list.add(new Custom(1));
    list.add(new Custom(2));

    Custom[] customs = new Custom[list.size()];
    list.toArray(customs);

    for (Custom custom : customs) {
        System.out.println(custom);
    }
Run Code Online (Sandbox Code Playgroud)

这是我的Custom班级: -

public class Custom {
    private int i;

    public Custom(int i) {
        this.i = i;
    }

    @Override
    public String toString() {
        return String.valueOf(i);
    }
}
Run Code Online (Sandbox Code Playgroud)


gil*_*tsl 5

将 List 转换为特定类型的 Array 的较短版本(例如 Long):

Long[] myArray = myList.toArray(Long[]::new);
Run Code Online (Sandbox Code Playgroud)

  • 这个在什么java版本上工作?我认为这在 Java 8 中是非法的......或者对于复杂类型无效 (2认同)