检测存储在Java对象中的基元的最佳方法是什么?

时间:2015-06-03 02:59:19

标签: java

我需要将一个存储在Java对象中的值转换为整数,那么检测对象包含哪种值的最佳方法是什么?

例如,当Double存储在对象中时,我执行此操作:

Double myval = 0.0;
Object myobj = myval;  
if (myobj instanceof Double) {Double dd = (Double) myobj; converted = dd.intValue();}

我不知道这是否有效,或者是最好的方式。由于对象可以包含任何类型的值(Double,Integer,int,float),因此检测原始值的最佳方法是什么?

感谢。

编辑:   在阅读答案后,我意识到一个对象不能包含原语,因此,问题是错误的。谢谢你澄清这个!

2 个答案:

答案 0 :(得分:3)

所有对象编号类型都是Number:

的子类
Data.Functor.Identity

答案 1 :(得分:2)

如果它包含所有不同类型的数字,您可以使用:

if (myobj instanceof Number) {converted = ((Number)myobj).intValue();}

这将处理if (myobj instanceof Number) { converted = ((Number) myobj).doubleValue(); } ByteShortIntegerFloat以及大多数但不是全部 - Double值(大于±2 52 的值将进行四舍五入)。最好使用Long以避免doubleValue()intValue()可能引入的截断。

longValue()无法存储原始值,因此您无需检查这些值。它们已经boxed进入相应的引用类型:ObjectintIntegerfloat等等。