当前位置: 首页 > 知识库问答 >
问题:

如何在java中求和泛型数字[重复]

东方华荣
2023-03-14

我有以下情况:

java prettyprint-override">class MyListOfNumbers<T extends Number & Comparable<T>>
{
    public T sum()
    {
        return list_of_Ts.stream()
        .sum();
    }
}
class MyListOfNumbers<T extends Number & Comparable<T>>
{
    public T sum()
    {
        return list_of_Ts.stream()
        .reduce(0, T::sum);
    }
}

那怎么做?

编辑:请考虑T可以是从Byte到BigDecimal的任何值,强制其为整数可能意味着丢失数据

共有1个答案

张宣
2023-03-14

传入累加器函数和标识值作为参数:

public T sum(T identity, BinaryOperator<T> accumulator) {
  return list_of_Ts.stream().reduce(identity, accumulator);
}

请注意,如果您希望避免在实际调用时传递这些信息,可以创建静态方法来执行调用:

public static int intSum(MyListOfNumbers<Integer> list) {
  return list.sum(0, (a, b) -> a + b);
}

public static double doubleSum(MyListOfNumbers<Double> list) {
  return list.sum(0, (a, b) -> a + b);
}

// etc.
 类似资料:
  • 问题内容: 我想创建一个KeyValue类,但以通用方式,这就是我写的内容: 错误显示:“令牌“>上的语法错误”,此令牌后应有标识符” 那我该如何在Java中创建一个通用构造函数呢? 问题答案: 您需要从构造函数的签名中删除:它已经隐式存在。

  • 我试图重写在子类中返回type as list的方法,如下例所示,由于泛型问题,我无法在子类中执行此操作。我无法更改我的超类代码,因此如何解决该问题?任何人都可以指引我。。。非常感谢。 无法更新的超类: 子类:

  • 安吉丽卡·兰格(Angelica Langer)在关于仿制药的常见问题解答中说(参见Technicalities.FAQ822): 如果这些方法具有具有不同边界的类型参数,则它们不会重写,因为这些方法的签名不是重写等价的。请记住,类型参数边界是泛型方法签名的一部分。 示例(泛型子类型方法重载泛型超类型方法;不推荐): 我不明白为什么方法在类中重载。据我所知,这应该是一个编译时错误,因为在和中具有相

  • 问题内容: 我使用Groovy,JUnit和EasyMock为Java应用程序编写单元测试。在EasyMock中,有几种重载方法已被弃用,其注释为“由于执行更严格的擦除操作,因此无法在Java 7中编译”。这些方法将类型为的对象作为参数。除其他外,存在以下方法: … Java不再允许这样做,但是如果您直接从Java调用该代码,则会调用正确的方法。例如,当您执行此代码时 正确的方法(列表中的最后一个

  • 问题内容: 我使用,在我的应用程序中添加了易于阅读的配置文件,并试图在该文件周围添加包装器,以简化类型转换。具体来说,我希望返回的值从提供的默认值开始“继承”它的类型。到目前为止,这是我得到的: (完整示例来源。) 不管是否从属性文件中读取返回值,from的返回值都是一个布尔值,对于字符串,整数,双精度数和&c而言,返回值都类似。当然,上面的代码片段实际上并没有编译: 我做错了吗,还是我只是试图做

  • 这可能是一个非常愚蠢的问题,但我不明白编译器为什么抱怨和编译。 我有两个非常简单的课程: 现在代码是: 我知道它为什么起作用。 块2,我有