gpt4 book ai didi

java - 从 ArrayList 到数组的对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:33 24 4
gpt4 key购买 nike

我正在从数据库中获取一些信息。我有一个方法,它使给定表的对象成为 ArrayList。比如工具、客户等。

我想知道是否有可能制作一个小的帮助方法,它接受一个 ArrayList 并返回一个内容类型的动态列表(工具[]),或者我是否必须为每种类型的对象制作方法?有没有更动态的方法来解决?


这不是方法,而是给定类型对象的方法示例,代码中不用担心编译和逻辑,它只是为了示例:

public Verktoy[] ToolsArray(ArrayList<Verktoy> b){
Verktoy[] a = new Verktoy[b.size()];
for(int i = 0; i<b.size(); i++){
a[i] = b.get(i);
}
return a;
}

最佳答案

所以基本上你想要的方法签名是这样的:

 public static <E> E[] toArray(List<E> list);

用法是:

 List<String> strList = new ArrayList<String>();
String[] strArr = toArray(strList);

List<Integer> intList = new ArrayList<Integer>();
Integer[] intArr = toArray(intList);

现在,如前所述,List已经定义了执行此操作的方法,只是它不是真正通用的。你必须给它一个数组来复制或使用 Object[] .

 List<String> strList = new ArrayList<String>();
Object[] objArr = strList.toArray();
String[] strArr = strList.toArray(new String[strList.size()]);

我认为这些都不是您想要的。不幸的是,没有办法完全按照您的要求进行操作,因为您无法在 Java 中创建通用数组。回到方法:

public static <E> E[] toArray(List<E> list) {
E[] arr = new E[list.size()]; // doesn't compile

return list.toArray(arr);
}

问题是Eerased所以那不是可编译的 Java 代码。 <E>在运行时不存在能够做 new E .

所以你能得到的最接近的是这样的:

public static <E> E[] toArray(List<E> list, Class<E> e) {
@SuppressWarnings("unchecked")
final E[] arr = (E[])Array.newInstance(e, list.size());

return list.toArray(arr);
}

但是使用起来并没有更方便:

List<String> strList = new ArrayList<String>();
String[] strArr = toArray(strList, String.class);

还有另一种有趣的方法是扩展 ArrayList并将此功能添加到其中。但是你仍然需要 Class<E>目的。你会这样做:

import java.util.Arraylist;
import java.util.Objects;
import java.lang.reflect.Array;

public class TypedList<E> extends ArrayList<E> {
private final Class<E> e;

public TypedList(Class<E> e) {
this.e = Objects.requireNonNull(e);
}

@Override
public E[] toArray() {
@SuppressWarnings("unchecked")
final E[] arr = (E[])Array.newInstance(e, size());
return toArray(arr);
}
}

这让您可以指定 Class<E>一开始和之后你可以调用toArray没有参数,例如:

TypedList<String> strList = new TypedList<String>(String.class);
String[] strArray = strList.toArray();

我的建议是避免尝试一般地使用数组。它们不适合这类事情。

关于java - 从 ArrayList 到数组的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22848102/

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