从泛型类返回数组

航空兵

ClassCastException运行此命令时出现错误,因为运行代码时将d隐式转换为double。但是,如果我更改对d in的引用,Object[]则它不能是set函数的参数。如果我将set函数更改为接受a,Object[]那么一切正常,但是如果有人在非type类型的对象上调用set,则该类将在运行时失败N

我需要一个可以get()旧阵列(或其克隆)并且可以将set()数据写入新阵列的解决方案。

public class Foo<N> {

    public static void main(String[] args) {
        Foo<Double> foo = new Foo<Double>();
        Double[] d = foo.get();

        // do stuff to d ...

        foo.set(d);
    }

    N[] data;

    public Foo() {
        data = (N[]) new Object[2];
    }

    public N[] get() {
        return (N[]) data;
    }

    public void set(N[] data) {
        this.data = data;
    }

}
i

要创建具有正确的运行时类型的数组,需要该类型的某种运行时表示形式。像这样的通用类Foo<N>没有的运行时表示形式N

有两种解决方案:

  1. 使用一个List<N>代替。如果可能的话,这是最好的!
  2. N通过向中传递Class<N>手动添加的运行时表示形式Foo,用于java.lang.reflect.Array.newInstance创建数组。

第二种解决方案的代码:

public Foo(Class<N> newDataClass) {
    data = (N[]) Array.newInstance(newDataClass, 2);
}

Foo<Double> foo = new Foo<>(Double.class);

编辑:

如果您要获取的是现有Double阵列的副本,则可以使用(N[]) data.clone()设置它不会有问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

泛型ObjectPool-如何返回泛型类?

来自分类Dev

如何在泛型类中返回对象的泛型类型?

来自分类Dev

泛型-方法返回类型作为扩展类

来自分类Dev

Java泛型:无法创建嵌套类的数组

来自分类Dev

如何从虚拟函数返回泛型派生类?

来自分类Dev

在具有不同泛型参数的抽象类中返回泛型是不好的做法

来自分类Dev

包含泛型成员的类数组出现问题

来自分类Dev

如何在泛型类中返回“ this”?

来自分类Dev

如何快速定义泛型类的数组

来自分类Dev

如何返回泛型类型的类

来自分类Dev

如何使具有泛型的类接受相同泛型的不同数组?

来自分类Dev

泛型类型参数C#-如何泛型类返回类型

来自分类Dev

泛型类和子类的数组

来自分类Dev

如何在Kotlin中将泛型类映射到相同类的泛型数组

来自分类Dev

为什么不能将Objects数组转换为泛型类的泛型子类的数组?

来自分类Dev

如何使用泛型返回泛型类的类类型?

来自分类Dev

如何从方法返回泛型类?

来自分类Dev

实例化泛型类的JAVA数组

来自分类Dev

在泛型类中传递int数组

来自分类Dev

泛型类的类型化数组

来自分类Dev

泛型类,根据类型返回特定的数据集

来自分类Dev

用于返回类的不同泛型类型的实例的单个方法

来自分类Dev

基于Newexpression返回匿名类型的泛型类实例

来自分类Dev

使用泛型返回从类型中提取的正确类

来自分类Dev

可以返回任何类型的 Java 包装泛型类

来自分类Dev

使用泛型类读取 Gson 中的匿名类数组

来自分类Dev

对泛型类的 SOAP Web 服务引用返回 nullexception

来自分类Dev

泛型类中数组属性的实例?

来自分类Dev

将泛型类传递给返回相同类的泛型 ObservableCollection 的方法

Related 相关文章

热门标签

归档