如何创建一个 class 包含多个可以执行操作的方法,可以接收 int、double、float、long、short 的数组列表

how to create a class that contain multiple medhods that can do operations, that can receive an arraylist of int,double,float,long,short

我想创建一个 class,其中包含多个可以进行数学运算的方法。该方法应该能够接收 int、double、float、long、short 的 ArrayList。我制作了这些方法,以便它们可以接收双精度 ArrayLists,因为根据我的理解,双精度是所有其他数字类型的父级。为什么我的方法不能接收整数的 ArrayList?

这是我的代码:

import java.util.*;
import java.util.ArrayList;

class Operations <U extends Number>
{
    // Function for calculating mean
    public static double mean(ArrayList<Double> doubles)
    {

        double sum = 0;
        for (int i = 0; i < doubles.size(); i++)
            sum += doubles.get(i);

        return (double)sum / (double)doubles.size();



    }

    // Function for calculating maximum value
    public static double max(ArrayList<Double> doubles){
        Collections.sort(doubles);
        double max=0;
        max=doubles.get(doubles.size()-1);
        return max;

    }

    // Driver code

}



public class Main {

    public static void main(String args[])
    {
        ArrayList<Double> doubles = new ArrayList<>(){
            {add(4.3); add(5.9); add(2.3); add(9.5);}
        };

        ArrayList<Integer> integers = new ArrayList<>(){
            {add(4); add(5); add(2); add(9);}
        };

        System.out.println(new Operations<Double>().mean(doubles));
       // System.out.println(new Operations<Double>().mean(integers));
    }

}

这里是 mean 的一个示例实现,应该适用于所有数字:

public static <T extends Number> double mean(List<T> numbers)
{
    double sum = 0;
    for (Number n : numbers)
        sum += n.doubleValue();

    return sum / (double)numbers.size();
}

同样 max 可能看起来像:

public static <T extends Number> T max(List<T> numbers) {
    T max = null;
    for (T t : numbers) {
        if (max == null || t.doubleValue() > max.doubleValue()) {
            max = t;
        }
    }
    return max;
}

测试:

@Test public void testNumbers() {
    List<Double> d = Arrays.asList(4.3, 5.9, 2.3, 9.5);
    System.out.println("doubles:  mean=" + mean(d) + " max=" + max(d));
    List<Integer> i = Arrays.asList(4, 5, 2, 9);
    System.out.println("integers: mean=" + mean(i) + " max=" + max(i));
}

输出:

doubles:  mean=5.5 max=9.5
integers: mean=5.0 max=9

错误点:

double is the parent of all the other number types

例如ArrayList<Integer>不能转换为ArrayList<Double> 但是您可以尝试使用类似的东西:

public U mean(List<U> values) {

您可以从这些值中获得双倍的值。