我发现EnumMap T [] toArray(T [] var2)具有以下实现:

public <T> T[] toArray(T[] var1) {

    int var2 = this.size();

    if (var1.length < var2) {
    var1 = (Object[])((Object[])Array.newInstance(var1.getClass().getComponentType(), var2));
    }

    if (var1.length > var2) {
    var1[var2] = null;
    }

    return (Object[])this.fillEntryArray(var1);
}


我不明白这是什么意思:

if (var1.length > var2) {
    var1[var2] = null;
}


如果我们的数组例如String[5]并且我们尝试:

enum myKeys{ONE, TWO, THREE};

EnumMap myEnum = new EnumMap<myKeys, String>(myKeys.class);

myEnum.put(myKeys.ONE, "1");
myEnum.put(myKeys.TWO, "2");
myEnum.put(myKeys.THREE, "3");

final Object[] objects = myEnum.entrySet().toArray(new Object[8]);

for (Object o: objects) {
    System.out.println(o);
}


输出为:

ONE=1
TWO=2
THREE=3
null
null
null
null
null


1)设计EnumMap T [] toArray(T [] a)而不是toArray()的目的是什么?

2)为什么使用

if (var1.length > var2) {
    var1[var2] = null;
}


是否标记N + 1元素对于迭代器为null?

最佳答案

这里有两个问题:

设计EnumMap T[] toArray(T[] a)而不是toArray()的目的是什么?

为列表添加了相同的实现。如果将T[] toArray(T[] a)与方法toArray()进行比较,则toArray()作为对象数组(如Object [])返回,而它是用于类型安全的通用实现。它告诉方法需要创建和返回哪种类型的Array,而不是总是创建Object []。

为什么使用var1[var2] = null;

该方法的文档说:

如果此集合适合指定的数组并有剩余空间(即,数组中的元素多于此集合),则紧接该集合结尾的数组中的元素将设置为null。 (仅当调用者知道此集合不包含任何null元素时,此方法才可用于确定此集合的长度。)

07-24 09:49
查看更多