有没有办法检查instanceof基元变量java

我们可以通过使用instanceof运算符知道对象引用是一个测试.但是有没有运算符来检查原始类型.例如:

byte b = 10;

现在,如果我只考虑值10.有什么办法可以发现它被声明为一个字节?

局部变量

假设你的意思是局部变量,只要在这种情况下作为一个对象java.lang.Byte传递,它就总是被它的包装类型自动包装.使用反射引用局部变量是不可能的,因此您无法区分Byte和byte或Integer和int等.

Object bytePrimitive = (byte) 10;

System.out.println("is a Byte ?   " + (bytePrimitive instanceof Byte));
System.out.println("Check class = " + (bytePrimitive.getClass()));

// false because class in this case becomes Byte, not byte.
System.out.println("Primitive = " + (bytePrimitive .getClass().isPrimitive()));

字段

但是,如果你在讨论类中的字段,那么事情会有所不同,因为你可以获得实际声明类型的句柄.然后,您可以按预期使用java.lang.Class.isPrimitive(),类型将为byte.class.

public class PrimitiveMadness {
    static byte bytePrimitiveField;
    static Byte byteWrapperField;

    public static void main(String[] args) throws Exception {
        System.out.println("Field type  =     " + PrimitiveMadness.class.getDeclaredField("bytePrimitiveField").getType());
        System.out.println("Is a byte   =     " + (PrimitiveMadness.class.getDeclaredField("bytePrimitiveField").getType() == byte.class));
        System.out.println("Is a primitive? = " + PrimitiveMadness.class.getDeclaredField("bytePrimitiveField").getType().isPrimitive());
        System.out.println("Wrapper field   = " + PrimitiveMadness.class.getDeclaredField("byteWrapperField").getType());
    }

}
相关文章
相关标签/搜索