创建通用Number子类的零值

Ben*_*wee 14 java generics

我怎样才能一般地创建一个任意数字类型的零?

这是一个玩具示例:将空数转换为零的函数.

static <T extends Number> T zeroIfNull(T value) {
    return value == null ? 0 : value;
}
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为文字零是类型int,我需要将其转换为类型T.

是否可以这样做?

Tom*_*ine 2

课堂上甚至没有提到零Number。如果你必须这样做,我建议避免nulls,也许是:

public static <T> T coalesce(T a, T b) {
    return a==null ? b : a;
}
Run Code Online (Sandbox Code Playgroud)

您还可以创建一个通用接口来处理数字,其功能对您的代码有意义:

interface NumberOps<T extends Number> {
    T zeroIfNull(T value);
}
Run Code Online (Sandbox Code Playgroud)

  • @ACV 我最糟糕的命名函数是“doIntersectionPrivilege”,对此我真的很抱歉。`coalesce` 来自具有相同功能的 SQL 函数(除了可变数量的参数,在本例中这是不必要的复杂化)。 (2认同)