Java 将对象返回到Double或Double的泛型方法

Java 将对象返回到Double或Double的泛型方法,java,generics,Java,Generics,我想返回两种不同类型的类列表或列表只需使用Double[].class和Double[].class即可。请注意,您不能将Double[]强制转换为Double[],反之亦然,您必须手动复制它。所以,扩展一下,您也不能将列表强制转换为列表。编辑:尽管再看一眼,这可能是您试图纠正的限制。只需使用Double[].class和Double[].class即可。请注意,您不能将Double[]强制转换为Double[],反之亦然,您必须手动复制它。所以,扩展一下,您也不能将列表强制转换为列表。编辑:尽

我想返回两种不同类型的类列表或列表只需使用Double[].class和Double[].class即可。请注意,您不能将Double[]强制转换为Double[],反之亦然,您必须手动复制它。所以,扩展一下,您也不能将列表强制转换为列表。编辑:尽管再看一眼,这可能是您试图纠正的限制。

只需使用Double[].class和Double[].class即可。请注意,您不能将Double[]强制转换为Double[],反之亦然,您必须手动复制它。所以,扩展一下,您也不能将列表强制转换为列表。编辑:尽管再看一眼,这可能是您试图纠正的限制。

这里有一些有趣的事情。因此,列表是一个列表对象,其中数组包含基元双精度

我冒昧地说,泛型在这里不是正确的解决方案

我认为你最好的选择是使用谷歌列表库

大概是这样的:

protected List<Double[]> getYserieRescaledList() {
   return this.YseriesScaled;
}

这里发生了一些有趣的事情。因此,列表是一个列表对象,其中数组包含基元双精度

我冒昧地说,泛型在这里不是正确的解决方案

我认为你最好的选择是使用谷歌列表库

大概是这样的:

protected List<Double[]> getYserieRescaledList() {
   return this.YseriesScaled;
}

您意识到您正在返回阵列列表,对吗-

简短答复:

即使在类中传递,也不能对泛型类型使用instanceof运算符,因此不能执行上面绘制的if语句

以下内容是非法的,并且不会在两个运算符的每个实例上编译:

这是因为泛型是一个仅编译时的构造。所有实例化的泛型类都转换为非泛型类,插入类型并执行类型转换等。询问泛型类是否在运行时使用特定类型实例化是没有意义的-泛型类已被替换为非泛型类

相反,切掉if语句,只需使用实例化类型来声明变量和数组,然后使用算法填充它们并返回结果:

详细回答:

泛型类应该表示可以应用于各种特定实例化类型的泛化处理的模板逻辑

很好的例子是java集合、持久性查询框架(如JPA Criteria API)、用于不同类型投资的财务计算器,甚至是带有标准服务容器基础结构逻辑的SOA服务模板

在您的情况下,使用伪方法重载可能更简单,即两个名称稍有不同的方法:

protected List<Double[]> getYserieRescaledList() {
    return this.Y;
}

protected List<double[]> getYserieRescaledList2() {
    return this.YCasted;
}

或者更好,只需坚持使用double[]作为唯一的情况。当您将值提取到其他变量/方法参数中时,编译器将根据需要透明地执行从double到double的autobox转换。

您意识到您正在返回数组列表,对吗?:-

简短答复:

即使在类中传递,也不能对泛型类型使用instanceof运算符,因此不能执行上面绘制的if语句

以下内容是非法的,并且不会在两个运算符的每个实例上编译:

这是因为泛型是一个仅编译时的构造。所有实例化的泛型类都转换为非泛型类,插入类型并执行类型转换等。询问泛型类是否在运行时使用特定类型实例化是没有意义的-泛型类已被替换为非泛型类

相反,切掉if语句,只需使用实例化类型来声明变量和数组,然后使用算法填充它们并返回结果:

详细回答:

泛型类应该表示可以应用于各种特定实例化类型的泛化处理的模板逻辑

很好的例子是java集合、持久性查询框架(如JPA Criteria API)、用于不同类型投资的财务计算器,甚至是带有标准服务容器基础结构逻辑的SOA服务模板

在您的情况下,使用伪方法重载可能更简单,即两个名称稍有不同的方法:

protected List<Double[]> getYserieRescaledList() {
    return this.Y;
}

protected List<double[]> getYserieRescaledList2() {
    return this.YCasted;
}

或者更好,只需坚持使用double[]作为唯一的情况。当您将值提取到其他变量/方法参数中时,编译器将根据需要透明地执行从double到double的autobox转换。

如何实现这一点?为什么要尝试?双人舱?你试着执行你的代码了吗?@AndrewThompson:这只是因为我在我的类中使用双对象,但需要将基元Double的数组列表返回给另一个类。我只会使用两个名称不同的方法。列出getXXX`并列出GetXXXbox。这并不是泛型的好用例,因为没有任何合理的类型r
你可以在双人和双人之间建立关系;自动装箱只是一个编译器技巧。如何实现这一点?为什么要尝试?双人舱?你试着执行你的代码了吗?@AndrewThompson:这只是因为我在我的类中使用双对象,但需要将基元Double的数组列表返回给另一个类。我只会使用两个名称不同的方法。列出getXXX`并列出GetXXXbox。这并不是泛型的好用例,因为在double和double之间没有任何合理的类型关系;自动装箱只是一种编译器技巧。
class treasure {
    protected <T> List<T[]> getYserieRescaledList(Class<T> cl) {
       List<T[]> result = null;
       // apply general algorithm here to populate the array
       // will work identically whether instantiated with Double or double
       return result;
    }
}
protected List<Double[]> getYserieRescaledList() {
    return this.Y;
}

protected List<double[]> getYserieRescaledList2() {
    return this.YCasted;
}