我需要将一个存储在Java对象中的值转换为整数,那么检测对象包含哪种值的最佳方法是什么?
例如,当Double存储在对象中时,我执行此操作:
Double myval = 0.0;
Object myobj = myval;
if (myobj instanceof Double) {Double dd = (Double) myobj; converted = dd.intValue();}
我不知道这是否有效,或者是最好的方式。由于对象可以包含任何类型的值(Double,Integer,int,float),因此检测原始值的最佳方法是什么?
感谢。
编辑: 在阅读答案后,我意识到一个对象不能包含原语,因此,问题是错误的。谢谢你澄清这个!
答案 0 :(得分:3)
所有对象编号类型都是Number:
的子类Data.Functor.Identity
答案 1 :(得分:2)
如果它包含所有不同类型的数字,您可以使用:
if (myobj instanceof Number) {converted = ((Number)myobj).intValue();}
这将处理if (myobj instanceof Number) {
converted = ((Number) myobj).doubleValue();
}
,Byte
,Short
,Integer
和Float
以及大多数但不是全部 - Double
值(大于±2 52 的值将进行四舍五入)。最好使用Long
以避免doubleValue()
或intValue()
可能引入的截断。
longValue()
无法存储原始值,因此您无需检查这些值。它们已经boxed进入相应的引用类型:Object
到int
,Integer
到float
等等。