【发布时间】:2017-06-02 18:08:43
【问题描述】:
我有以下场景:
class MyListOfNumbers<T extends Number & Comparable<T>>
{
public T sum()
{
return list_of_Ts.stream()
.sum();
}
}
我对 T 一无所知(故意),除了它是一个数字并且可以将其与“兄弟姐妹”(排序东西所需要的...)进行比较。
显然这行不通,而且它不会以旧的 Java 方式(即循环)工作,因为据我所知,您根本无法执行 T x = 0。
这都不行,因为我认为同样的原因以及 T 没有实现 sum 的事实;此外,我读到它不适用于空集。
class MyListOfNumbers<T extends Number & Comparable<T>>
{
public T sum()
{
return list_of_Ts.stream()
.reduce(0, T::sum);
}
}
那该怎么做呢?
编辑:请考虑 T 可以是从 Byte 到 BigDecimal 的任何内容,并且将其强制为整数可能意味着丢失数据
【问题讨论】:
-
你是如何创建
list_of_Ts的? -
@alayor 其实来自一个HashMap.entrySet()
-
@alayor 这并不重要。它可以通过构造函数传递,也可以在内部创建并填充
void add(T e){list_of_Ts.add(e);}方法。重要的是我们可以假设我们可以访问List<T> list_of_Ts,其中可能包含一些T元素。
标签: java generics lambda java-8