【问题标题】:Why does List<T>.toArray() return generic Object[] instead of T[]? [duplicate]为什么 List<T>.toArray() 返回泛型 Object[] 而不是 T[]? [复制]
【发布时间】:2017-04-12 06:56:30
【问题描述】:

例如:

List<String> items = new ArrayList<String>();
String[] aItems = items.toArray(); // type error, because toArray() returns Object[]

我明白这就是现状,无法改变。当然我可以将它转换为 String[],但我想知道它背后的想法是什么?这是 Java 中的“错误”,还是有充分的理由?

【问题讨论】:

    标签: java generics collections


    【解决方案1】:

    灵活性。

    不传递任何参数的toArray() 方法返回Object[]

    有一个很好的理由是,现在您知道您所期望的类型,并且该方法的作者由于类型擦除不知道在运行时返回哪种类型的数组。所以他们只是让它成为所有对象的超级类型Object,这就是它返回Object[]的原因

    如果你想指定你的类型,它们很好并返回你的特定类型:)

    String[] aItems= items.toArray(new String[0]);
    

    【讨论】:

    • 最好使用items.toArray(new String[items.size()]) 来防止分配额外的数组对象。如果数组大小等于List 大小,则items 元素将被复制到给定数组,并且方法返回该数组,而不是新创建的数组。
    • 我还是不明白为什么 List().toArray() 不能返回 T[] ?我看不出怎么可能返回其他任何东西。
    • 哦,我现在明白了。你不能那样声明它。好吧,我不认为这是一个很好的理由。我认为这是一种语言障碍。
    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2016-11-10
    相关资源
    最近更新 更多