gpt4 book ai didi

java - 将对象返回到 Double 或 double 的通用方法

转载 作者:行者123 更新时间:2023-11-29 03:40:58 26 4
gpt4 key购买 nike

我想从一个方法返回 2 种不同类型的类(List<double[]>List<Double[]),如以下伪代码所示。如何实现?

编辑代码和评论:Eclipse 甚至不允许编译,因为这是更改返回或数据类型的请求。我知道必须手动转换 YserieScaledCasted。

protected List<E[]> getYserieRescaledList(Class<E> c) {

if (Double[].class == c)
return this.YserieScaled;
else if (double[].class == c)
return this.YserieScaledCasted;

}

EDIT2:我发现我的问题的正确方法只是重载描述的方法 here .

最佳答案

你意识到你正在返回一个数组列表,对吧? :-)

简答:

  • 即使您传递的是 Class<E> ,您不能在泛型类型上使用 instanceof 运算符,因此您不能执行上面概述的 if 语句

  • 以下是非法的,不会在两个 instanceof 运算符中的每一个上编译:

class trash {
protected <T> List<T[]> getYserieRescaledList(Class<T> cl) {
List<T[]> result = null;
if (cl instanceof Class<Double>) {
result = ...;
} else if (cl instanceof Class<double>) {
result = ...;
}
return result;
}
}
  • 这样做的原因是泛型是一种仅在编译时构造的结构。所有实例化的泛型类都转换为非泛型类,插入类型并进行类型转换等。询问泛型类是否在运行时用特定类型实例化是没有意义的——泛型类已被交换为非泛型类泛型类

  • 相反,删除 if 语句并简单地使用实例化类型来声明变量和数组,然后使用您的算法填充它们并返回结果:

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;
}
}

更长的答案:

通用类应该代表通用处理的“模板逻辑”,可以应用于各种特定的实例化类型。

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

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

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

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

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

关于java - 将对象返回到 Double 或 double 的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13187406/

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