gpt4 book ai didi

java - ArrayList 类型中的方法 toArray(T[]) 不适用于参数 (boolean[])

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:13 25 4
gpt4 key购买 nike

我写了一个函数来获取boolean数组,来自 arraylist<boolean>boolean大批但我得到了错误:

The method toArray(T[]) in the type ArrayList is not applicable for the arguments (boolean[])

ArrayList<Boolean> fool = new ArrayList<Boolean>();

for (int i = 0; i < o.length(); i++) {
if (Integer.parseInt(o.substring(i, i + 1)) == 1) {
fool.add(true);
} else {
fool.add(false);
}
}

boolean[] op = fool.toArray(new boolean[fool.size()]);

如果我改变类型 boolean[]opBoolean[]op ,那是工作,但我需要 boolean[] ..

那么我怎样才能得到 boolean数组?

最佳答案

基本类型不能在泛型中使用。为了使数组匹配 T[] 的类型签名,您必须像在 ArrayList 的声明中那样使用 Boolean 包装类,即使您不这样做不希望最终数组为该类型:

Boolean[] op = fool.toArray(new Boolean[fool.size()]);

无法使用泛型获取原始 boolean 的数组,并且自动装箱或强制转换不适用于数组(例如,不可能将原始类型的数组分配给包装器的数组类型,反之亦然)。获得你想要的数组的唯一方法是用困难的方式,使用循环:

boolean[] op = new boolean[fool.size()];

for(int n = 0; n < temp.length; n++)
{
//autoboxing implicitly converts Boolean to boolean
op[n] = fool.get(n);
}

这可能可以使用 Java 8 中的 map 结构更优雅地完成。

就我个人而言,泛型不适用于原语这一事实是 Java 中为数不多的让我真正感到沮丧的事情之一。我不打算与设计者争论,但不得不编写七个不同的函数只是为了对不同类型的数组做同样的事情似乎违背了首先向语言添加泛型特性的全部意义。看看java.util.Arrays class ;不得不编写这种代码足以让我想切换到 C++。

关于java - ArrayList<Boolean> 类型中的方法 toArray(T[]) 不适用于参数 (boolean[]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15715578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com