我的询问是关于包装,使用 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/