java - 类型转换为泛型类型?
问题描述
public class NumberAnalyzer<T extends Number>{
public T average() {
Double temp = 0.0;
for (int i = 0; i < numberArray.size(); i++) {
temp += numberArray.get(i).doubleValue();
}
temp /= numberArray.size();
return (T) temp;
}
我将如何输入这个,所以当我传入 Integer 或 Double 时,它会给我传入的正确类型?目前,它总是以 Double 的形式返回。
这是你的意思吗?
public class NumberAnalyzer<T extends Number> {
private Function<Double, T> castFn;
NumberAnalyzer(Function<Double, T> castFn) {
this.castFn = castFn;
}
private ArrayList<T> numberArray;
public T average() {
Double temp = 0.0;
for (int i = 0; i < numberArray.size(); i++) {
temp += numberArray.get(i).doubleValue();
}
temp /= numberArray.size();
return castFn.apply(temp);
}
这是我的测试课:
public static void main(String[] args) {
ArrayList<Integer> intArrayListTest = new ArrayList<>();
intArrayListTest.add(22);
intArrayListTest.add(7);
intArrayListTest.add(839);
intArrayListTest.add(24);
intArrayListTest.add(99);
NumberAnalyzer<Integer> numTest = new NumberAnalyzer<>(intArrayListTest);
所以我正在寻找的答案是,如果我传入一个值为 8,9 和 66 的 int 数组,则平均值为:27
如果传递具有相同值的双精度数组,它将给我:27.66
目前,即使我传入一个 int,它也总是会返回一个 double 值。
解决方案
将一个引用类型的变量转换为另一个引用类型实际上并没有对值做任何事情——这只是对编译器说“相信我,我知道的类型信息比你多”的一种方式。
因此,将 an 强制转换Integer
为 aDouble
不会使其成为 a Double
,它只会诱使编译器相信该类型,从而在尝试将其Integer
用作 a时导致后续问题Double
。
您不是要在这里投射,而是要转换.
您需要传入 aFunction<Double, T>
或 a DoubleFunction<T>
,作为方法或构造函数的参数。
public T average(Function<Double, T> castFn) {
// ...
return castFn.apply(temp);
}
或者
public class NumberAnalyzer<T extends Number>{
private Function<Double, T> castFn;
NumberAnalyzer(Function<Double, T> castFn) { this.castFn = castFn; }
public T average() {
// ...
return castFn.apply(temp);
}
推荐阅读
- javascript - 尽管使用箭头语法,但无法读取未定义的属性“状态”
- python - Python-Kivy 应用程序在使用 buildozer 为 android 运行时给出“Module Not Found Error”
- java - DeepLearning4J Doc2Vec 输入结构
- python - 如何使用 pyinstaller 将 xml 文件与 python 可执行文件打包?
- linux - umask可以用于特殊权限吗
- mysql - 将具有足够经验和技能的用户与项目要求相匹配
- docker - 无法通过 GitLab 将 docker-compose 推送到 AWS ECR
- python - 如何为 GetDist 图保存 EMCEE chian
- python - 如何处理 zip 文件中的文件
- sql-server - 如何向此 PowerShell 脚本添加参数以停止命名的 SQL Server 服务?