如何确定基元变量的基元类型?
2022-08-31 20:52:14
Java中是否有类似“typeof”的函数返回基元数据类型(PDT)变量的类型或操作数PT的表达式?
instanceof
似乎仅适用于类类型。
Java中是否有类似“typeof”的函数返回基元数据类型(PDT)变量的类型或操作数PT的表达式?
instanceof
似乎仅适用于类类型。
请尝试以下操作:
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
至于 ,您可以使用它的动态对应类#isInstance
:instanceof
Integer.class.isInstance(20); // true
Integer.class.isInstance(20f); // false
Integer.class.isInstance("s"); // false
有一种简单的方法不需要隐式装箱,因此您不会混淆基元及其包装器。你不能用于基元类型 - 例如,调用(等效于)将返回,就像自动装箱到一个之前一样。isInstance
Integer.TYPE.isInstance(5)
Integer.TYPE
int.class
false
5
Integer
获得所需内容的最简单方法(注意 - 从技术上讲,它是在编译时为基元完成的,但它仍然需要评估参数)是通过重载。看我的ideone糊状物。
...
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 */
这取决于编译器确定表达式类型和选取正确重载的能力。