如何制作没有双精度和浮点数的通配符
How to make wildcard without double and float
我想制作泛型,它只能包含不带小数部分的数字 (Integer
、Long
、Char
、Byte
、Short
) .可能吗?我理解 class Number
是 abstract
,所以每个人都可以编写自己的各种数字的实现。但现在我只谈论 Oracle 实现。
不,不可能在编译时实现此行为。
您可以在 Java 中指定多个类型范围 - 例如 T extends Integer & Long
- 但这意味着 T
必须扩展 both Integer
和 Long
.
其他语言 - 例如 Ceylon - 知道类型联合的概念,如 Integer|Long|Char
,但 Java 不知道。
一种可能的解决方法是使用 Number
作为类型绑定并在运行时手动检查类型,或者为允许的类型复制 public 接口(例如写 someMethod(Integer)
和 someMethod(Short)
调用接受 Number
的私有方法。无论如何,请三思你是否真的需要这个限制。
我想制作泛型,它只能包含不带小数部分的数字 (Integer
、Long
、Char
、Byte
、Short
) .可能吗?我理解 class Number
是 abstract
,所以每个人都可以编写自己的各种数字的实现。但现在我只谈论 Oracle 实现。
不,不可能在编译时实现此行为。
您可以在 Java 中指定多个类型范围 - 例如 T extends Integer & Long
- 但这意味着 T
必须扩展 both Integer
和 Long
.
其他语言 - 例如 Ceylon - 知道类型联合的概念,如 Integer|Long|Char
,但 Java 不知道。
一种可能的解决方法是使用 Number
作为类型绑定并在运行时手动检查类型,或者为允许的类型复制 public 接口(例如写 someMethod(Integer)
和 someMethod(Short)
调用接受 Number
的私有方法。无论如何,请三思你是否真的需要这个限制。