【发布时间】:2021-05-14 07:42:13
【问题描述】:
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 值。
【问题讨论】:
-
旁白:使用
double temp而不是Double temp,避免重复拆箱和装箱。 -
您的变量
temp是Double,所以当然该方法总是返回Double。转换非原始类型的变量不会以某种方式将对象从一种类型转换为另一种类型。