Tag: toarray

在Java中列出类的toArray-为什么我不能将“Integer”列表转换为“Integer”数组?

我定义了List stack = new ArrayList(); 当我试图通过以下方式将其转换为数组时: Integer[] array= stack.toArray(); 我得到这个例外: Exception in thread “main” java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from Object[] to Integer[]. 为什么? 它与Integer完全相同 – Integer。 当这些类是父子关系时,它不像这种通用情况 我试着做铸造: Integer[] array= (Integer[]) stack.toArray(); 但在这里我得到这个错误: Exception in thread “main” java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; 问题是什么?

Java List toArray(T a)实现

我只是看着List接口中定义的方法: 以正确的顺序返回包含此列表中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。 如果列表适合指定的数组,则返回其中。 否则,将为新数组分配指定数组的运行时类型和此列表的大小。 如果列表适合指定的数组,并且有空余空间(即,数组的元素多于列表),则紧跟集合结尾的数组中的元素将设置为null。 仅当调用者知道列表不包含任何null元素时,这对于确定列表的长度很有用。 T[] toArray(T[] a); 而我只是想知道为什么它以这种方式实现,基本上如果你将一个长度为<array.size()的数组传递给它,它只会创建一个新的并返回它。 因此,在方法参数中创建新的Array对象是没用的。 另外,如果你使用列表的大小传递一个足够长的数组,如果返回与对象相同的对象 – 返回它真的没有意义,因为它是同一个对象但是为了清晰起见。 问题是我认为这会促进效率稍低的代码,在我看来,Array应该只是接收类并只返回带有内容的新数组。 有没有理由说它没有这样编码?

为什么Java的Collection .toArray()返回一个Object 而不是一个E ?

在Javagenerics之前, Collection.toArray()无法知道开发人员期望的数组类型(特别是对于空集合)。 据我了解,这是成语collection.toArray(new E[0])背后的主要理由.toArray collection.toArray(new E[0]) 。 使用generics, Collection.toArray()只能返回一个充满E和/或其特化实例的数组。 我想知道为什么返回类型仍然是Object[]而不是E[] 。 在我看来,返回E[]而不是Object[]不应该破坏现有的代码。 请参阅: Collection.toArray() , Collection.toArray(T[])和相关主题java:(String [])List.toArray()给出ClassCastException

Java List T toArray(T a)实现

我只是看List接口中定义的方法: T[] toArray(T[] a) ,我有一个问题。 为什么它是通用的? 因此,方法不是完全类型安全的。 以下代码片段编译但导致ArrayStoreException : List list = new ArrayList(); list.add(1); list.add(2); String[] stringArray = list.toArray(new String[]{}); 在我看来,如果toArray不是通用的并采用List类型参数,那就更好了。 我已经写过玩具示例了,它可以通用: package test; import java.util.Arrays; public class TestGenerics { private Object[] elementData = new Object[10]; private int size = 0; public void add(E e) { elementData[size++] = e; } @SuppressWarnings(“unchecked”) //I took this […]