当前位置: 首页 > 面试题库 >

Java:如何根据对象的类型动态创建指定类型的数组?

上官锦
2023-03-14
问题内容

我想获取一个传递的列表,该列表我知道是同构的,并从中创建一个与其中的元素类型相同的数组。

就像是…

List<Object> lst = new ArrayList<Object>;

lst.add(new Integer(3));

/// somewhere else ...

assert(my_array instanceof Integer[]);

问题答案:

转换将在运行时发生,而类型在编译时丢失。因此,您应该执行以下操作:

public <T> T[] toArray(List<T> list) {
    Class clazz = list.get(0).getClass(); // check for size and null before
    T[] array = (T[]) java.lang.reflect.Array.newInstance(clazz, list.size());
    return list.toArray(array);
}

但是请注意,上面的第三行可能会引发异常-它不是类型安全的。



 类似资料:
  • 问题内容: 有没有更好的方法来简化由(1)…(2)括起来的语句? Java Reflection有帮助吗? 问题答案: 高效,干净地处理此问题的最佳方法是让foo返回对象的holder类。

  • 例如,类的ViewBag属性,我们可以动态地获取/设置值,并向该对象添加任意数量的附加字段或属性,这很酷。我想在其他类型的应用程序中使用类似的东西,除了MVC应用程序和类之外。当我试图创建动态对象并设置它的属性时,如下所示: 我有,带有message属性或索引器'<>f__anonymoustype0.a'不能赋值--它在第2行中是只读的。我也认为这不是我想要的。也许有什么课可以让我做一些类似的事

  • 问题内容: 假设通用类型声明(Java) 我如何在运行时实例化一个Type对象,该对象表示通过特定类型T(也仅在运行时才知道)进行参数化的Foo? 问题答案: 我想我明白你的问题。您想要序列化一个,并且在运行时具有class对象(但在编译时不是固定的)。因此,在Gson中建议的创建匿名子类的解决方案不起作用,因为这要求在编译时对参数化类型(例如)进行硬编码,并且如果使用,则该解决方案不起作用。 但

  • Class类提供很多方法用于获取类的各种信息,比如获取类名、判断该类是否是一个接口还是普通类等等。在Java中枚举类是一种类,而注解是一个接口,数组也是一个类;Java原始类型(boolean, byte, char, short, int, long, float, and double)和关键字void也被表示为Class的对象。

  • 我有一个客户机正在发送列表 的usecase。任务是迭代并执行此函数,并将其保存在TypedSafeMap中。伪客户端代码: 在中,任务是执行这些函数并将其保存在TypedSafeMap中,其中键是函数结果类型的数据类型,值是函数的返回。apply(); 下面的代码

  • 问题内容: 如何创建泛型类型的数组?通用方法如何工作?它返回通用数组的副本。因此可以创建通用数组。但是如何?怎么能写一个类似的方法呢? 问题答案: 如果需要在运行时创建它,则至少需要在此时知道类型,因此可以使用以下方法: where 是泛型类型,是的类,并且是初始大小。 这里的文件