29
A
回答
50
尝试以下操作:
int i = 20;
float f = 20.2f;
System.out.println(((Object)i).getClass().getName());
System.out.println(((Object)f).getClass().getName());
它会打印:
java.lang.Integer
java.lang.Float
至于instanceof
,你可以使用它的动态对应Class#isInstance
:
Integer.class.isInstance(20); // true
Integer.class.isInstance(20f); // false
Integer.class.isInstance("s"); // false
+0
还没有还没试过但这是我在找什么。谢谢。 – ashley
13
有一个简单的方式,不需要隐式拳击,所以你不会感到困惑吐温原语和他们的包装。您不能使用isInstance
作为原始类型 - 例如呼叫Integer.TYPE.isInstance(5)
(Integer.TYPE
相当于int.class
)将返回false
,因为5
被自动复制到Integer
之前。
最简单的方式来获得你想要的东西(注 - 这是在编译时的原语技术上做了,但它仍然需要论证的评价)是通过超载。请参阅我的ideone paste。
...
public static Class<Integer> typeof(final int expr) {
return Integer.TYPE;
}
public static Class<Long> typeof(final long expr) {
return Long.TYPE;
}
...
这可用于如下,例如:
System.out.println(typeof(500 * 3 - 2)); /* int */
System.out.println(typeof(50 % 3L)); /* long */
这依赖于编译器的确定表达式的类型和选择正确的过载的能力。
相关问题
- 1. typedef - 原始类型到原始类型
- 2. 如何正确使用原始类型
- 3. 矢量和原始类型初始化
- 4. 原型中原始类型的行为
- 5. 与原始类型
- 6. Bash原始类型
- 7. 获取原始原型对象内给定一个变量存储在原始原型
- 8. 将原始类型应用到原始类型
- 9. 如何确定WPF DataGrid中的原始类型(使用AutoGenerateColumn时)?
- 10. 找回原始类型的提升变量变量
- 11. 整型为原始类型
- 12. 原始类变量的算术操作
- 13. Hashtable的原始类型
- 14. 原始类型的一般定义
- 15. Swagger原始类型的定义
- 16. 原始类型不变性和堆栈?
- 17. 获取原始变量值
- 18. 追加原始HTML变量
- 19. 超载原始变量
- 20. 字符串:JavaScript中的原始类型变量或引用类型变量?
- 21. Boost.Any获得原始类型
- 22. 比较原始类型
- 23. Objective-C setValue:forKey原始类型
- 24. OCMockito捕获原始类型?
- 25. MyBatis - 原始类型列表
- 26. 对原始类型双“
- 27. 没有类型原始
- 28. 建模DateTime原始类型
- 29. 原始类型双错误
- 30. 对象或原始类型
你在寻找一个代表'int','long'等的类吗? – dasblinkenlight
不知道它的类型,你不能有一个基本的数据类型。它必须装入一个'Number'类型以便你不知道它,在这种情况下你可以使用'instanceof'。 – Thor84no
@ Thor84no是的,你可以用反射 – Bohemian