【问题标题】:What is the best way to detect a primitive stored in a Java Object?检测存储在 Java 对象中的原语的最佳方法是什么?
【发布时间】:2015-08-17 01:44:32
【问题描述】:

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

例如,当 Double 存储在对象中时,我会这样做:

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

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

谢谢。

编辑: 阅读答案后,我意识到一个对象不能包含原语,所以问题是错误的。感谢您澄清这一点!

【问题讨论】:

  • 更多背景信息会非常有帮助。
  • 我认为这又是一个问题,但是,当然。你还需要知道什么?

标签: java


【解决方案1】:

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

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

【讨论】:

  • 如果这可行,它可能是我本周学到的最好的,它适用于所有数据类型吗? (正在测试中)。
  • 除布尔值和字符外的所有盒装基元。
【解决方案2】:

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

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

这将处理ByteShortIntegerFloatDouble,以及大多数(但不是全部)Long 值(大于 ±252 将进行四舍五入)。最好使用doubleValue() 以避免intValue()longValue() 可能引入的截断。

Object 无法存储原始值,因此您无需检查这些值。它们已经将boxed 转换为相应的引用类型:intIntegerfloatFloat 等。

【讨论】:

  • 它是否适用于原语? (编辑后:很好!那么这很好地完成了任务,谢谢!)
猜你喜欢
  • 2011-01-24
  • 2020-11-23
  • 2014-06-29
  • 2011-03-20
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
相关资源
最近更新 更多