java - 具有泛型类型的 Guava 函数

标签 java generics guava

我正在尝试编写一些 Function,我将在我的其余代码中经常使用它们。其中一些是诸如对 Iterable 的所有数字求和之类的事情。而不是为 DoubleInteger 等实现不同的函数。我想要一个函数来总结给定 Iterable 的所有元素,只要每个元素都是一个数字。为此,我尝试了以下操作:

<T> Function<List<T extends Number>, T> sum = new Function<List<T extends Number>, T>() {
    public T apply(List<T> tlist) {
        // the main code
    }
};

但是我收到一个编译器错误,提示“意外的标记”。我以前用泛型编写自己的 Java 方法,但我不明白为什么同样的事情在这里不起作用。我是不是漏掉了一些非常明显的东西,还是 guava 函数不允许泛型?

最佳答案

几件事:

  1. 如果您要为通用类型定义边界(例如 T extends Number ),您必须在声明类型的地方进行定义(例如不是 <T> Function... 而是 <T extends Number> Function... )。我看到 Louis 已经讲过了。
  2. 我不确定是否真的有可能实现一个可以对任何类型的 Number 求和的函数,尽管我想你可以相当接近。您必须考虑数字大于任何内置基本类型可以表示的可能性( BigIntegerBigDecimal ,甚至可能是自定义 Number 子类)。
  3. 如果您的函数返回 Double,您的方法根本不需要类型参数.

它可以只是:

Function<List<? extends Number>, Double> sum = new Function<List<? extends Number, Double>() {
  public Double apply(List<? extends Number> numbers) {
    // the main code
  }
}

关于java - 具有泛型类型的 Guava 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22054873/

相关文章:

java - Guava :合并两个多图

java - Guava eventbus 有订阅者吗?

java - 我如何处理 Selenium 和 Java 中的引导日期选择器

java - 需要一种方法来获取与 List.stream().anyMatch() 匹配的字符串中的模式

java - 无法使用 EventFiringWebDriver 检索 WebDriver Wrapper

c# - 使用 ASP.NET Core Microsoft.Extensions.DependencyInjection 注册部分封闭的泛型类型

java - 在 Kotlin 上转换泛型类型

java - 如何将 arraylist 的第一项移动到最后一个位置?

c# - A-Star (A*) 和通用查找方法

java - 如何将列表拆分为给定数量的子列表?