java - 对象是否有 native 类型安全的包装和拆箱?

标签 java types

我的询问是关于包装,使用 Object 类作为我的包装器。

我的目标是获取原始 int (或 int 的包装)并将其从通用对象中拆箱。

唯一的问题是我将在运行时使用混合类型,因此我无法通用地键入方法的返回类型。 T var1 != (T) var2

我现在能做的事情有过多的开销,因为我不能假设对象包装了 int 类型的值,所以我解析它。

Object int_wrapped_in_object = 1;

Integer.valueOf(String.valueOf(int_wrapped_in_object));

//I could cast from Object to int with:
//(int) int_wrapped_in_object
//but this will always anticipate a classcastexception in case the value was wrapped with another type, like String

这可行,但我理想情况下希望跳过解析步骤,只打开整数值的框。

整数包装类不支持valueOf(Object o),可能是因为Object 没有实现相对转换。它(对象)支持toString()。但不是 toInt()。这是非常奇特的,因为 Object 确实可以包装原始 int。为什么会这样,超出了我的知识水平,所以我只能用我所拥有的知识来工作。据我所知,甚至可能有将对象展开为 int 的 native 支持。

请帮助我找到一个解决方案,该解决方案涉及使用最少的解析并引入尽可能少的异常来获取原始 int 值。

最佳答案

您的误解:

Object int_wrapped_in_object = 1;

int_wrapped_in_object的类型Integer,而不是Object!编译器已经为您准备好了!

换句话说:java编译器没有方式将int“装箱”成“唯一”对象的东西。

因此,您只需要一个简单的 int_wrapped_in_object instanceof Integer 即可确定该对象是否实际上是一个 Integer。然后您就可以简单地施放!

关于java - 对象是否有 native 类型安全的包装和拆箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45699699/

相关文章:

java - jsp和jsi有什么区别?

java - 数据属性的 OWL 类表达式

types - 是否可以使用类型注释绕过值限制?

c# - 如何在C++中将对象作为参数传递?

javascript - Angular 路由困惑/奇怪的行为

java - 又是: How to solve 'Repeated column in mapping for collection' ?

java - Datanucleus增强器错误: no objectid-class

Java 实体 Bean 不会从数据库中删除行;仅来自 JTable

scala - Scala 中的奇怪输入错误

sql - SQL变量数据类型和表列数据类型之间的区别