我想创建一个方法来比较一个数字,但可以有一个数字的任何子类的输入.
我以下列方式看待这样做:
public static <T extends Number> void evaluate(T inputNumber) { if (inputNumber >= x) { ... } }
在我可以执行比较之前,我需要获得实际的primative,Number类有一个方法来为每个primative提取这个,但是我想要一个干净的方式来选择正确的.
这可能吗?
干杯
解决方法
不幸的是,没有办法从包装类型获取原始类型,而不诉诸if / else块.
问题在于,不可能以通用的方式实现这种方法.这里有一些看似可能的方法,可以期望在Number类中找到:
public abstract X getPrimitiveValue();
这会很好,不是吗?但是这是不可能的.没有可能的X可能是int,float,double等的抽象.
public abstract Class<?> getCorrespondingPrimitiveClass();
这也不会有帮助,因为没有办法实例化原始类.
所以你可以做的唯一的事情是所有类型的共同之处就是使用longValue()或doubleValue()方法,但是如果你正在处理错误的类型,你将失去信息.
所以没有:java数字层次结构只是不适合以通用的方式解决这些问题.