Java 是否有一种流行的技术可以对具有泛型类型但仅限于数字的数组元素求和?

Java 是否有一种流行的技术可以对具有泛型类型但仅限于数字的数组元素求和?,java,arrays,generics,Java,Arrays,Generics,我创建了一个以数字为界的泛型类型数组。我创建了一个方法来求其所有元素的和。 这是密码 class-GenericMethod{ 公共静态void main(字符串[]args){ 整数[]arr={10,20,30,40,50}; int sum=通用方法集合元素(arr); 系统输出打印项数(总和); Float[]Float={3.0f,4.19f}; int sum2=GenericMethod.sum(浮点); 系统输出打印LN(sum2); } 公共静态综合要素(T[]arr){ in

我创建了一个以数字为界的泛型类型数组。我创建了一个方法来求其所有元素的和。
这是密码

class-GenericMethod{
公共静态void main(字符串[]args){
整数[]arr={10,20,30,40,50};
int sum=通用方法集合元素(arr);
系统输出打印项数(总和);
Float[]Float={3.0f,4.19f};
int sum2=GenericMethod.sum(浮点);
系统输出打印LN(sum2);
}
公共静态综合要素(T[]arr){
int响应=0;
对于(T:arr){
响应+=t.intValue();
}
返回响应;
}
}
在该方法中,返回类型仍然是
int
。我还想将返回类型更改为泛型

  • 我已尝试使用泛型类型
    N
    声明
    响应
    变量,但无法使用
    0
    或甚至使用
    Integer
    包装类对其进行初始化
    N result=Integer.valueOf(0)
    我最初认为这是可能的,因为
    Integer
    类扩展了
    Number
  • 然后我尝试将其初始化为
    null

    N结果=null
    但是这一行,
    result=result+array[i].intValue()
    抛出一个错误,说明
    运算符+不能应用于N,int
    。我不能把线路改成
    result=result+array[i]
    因为它显示
    运算符+不能应用于N,N
  • 我也试过这个“黑客”
公共静态N和(N[]数组){
数字结果=数组[0];
if(整数的结果实例){
整数temp=result.intValue();
for(int i=0;i
但是我必须为所有数字类型指定案例。
有人能帮我一下吗, -修改此方法,使其可以返回泛型类型而不是
int
。 -帮助我理解这个问题的本质和原因,是因为类仍然是非泛型类型吗?

如果使用Java 8+,最简单的方法是使用
Arrays.stream(T[])
创建一个
T
(s)流,然后通过添加
减少该流。像

Integer[] arr = { 10, 20, 30, 40, 50 };
Float[] floats = { 3.0f, 4.19f };
System.out.println(Arrays.stream(arr).reduce((a, b) -> a + b));
System.out.println(Arrays.stream(floats).reduce((a, b) -> a + b));
不需要其他方法但是,如果您想将其作为一种方法,您可以通过如下操作

public static <T> T add(T[] arr, BinaryOperator<T> op) {
    return Arrays.stream(arr).reduce(op).get();
}

您可以传入其他参数吗?如果在实现中不使用具体的
Number
子类,您将无法执行算术运算;因此,使用泛型参数的好处无论如何都会失去。最好选择一个具体的子类(比如
Double
BigDecimal
),并将其作为返回类型,然后使用该类型进行计算。
System.out.println(add(arr, (a, b) -> a + b));