typeof in Java 8

2022-09-04 07:45:10

如果我们想检查javascript中变量的数据类型,我们可以使用运算符。typeof

考虑此代码段

var c = 'str' ;
console.log(typeof(c)); // string
c = 123 ;
console.log(typeof(c)); // number
c =  {} ;
console.log(typeof(c)) ; // object

我想在 中实现相同的功能。Java没有typeof运算符,但有运算符来检查类型。Java 8instanceof

System.out.println("str" instanceof String);  // true 

Integer a  = 12 ;
System.out.println(a instanceof Integer);


Float f = 12.3f
System.out.println(f instanceof Float); // true

我们能做得更好吗?Plus 不支持基元类型 。instanceof

在 中有什么方法吗?任何相关方法将不胜感激。java 8


答案 1

您可以使用 getClass() 方法获取您正在使用的对象的类型:

Object obj = null;
obj = new ArrayList<String>();
System.out.println(obj.getClass());

obj = "dummy";
System.out.println(obj.getClass());

obj = 4;
System.out.println(obj.getClass());

这将生成以下输出:

class java.util.ArrayList
class java.lang.String
class java.lang.Integer

如您所见,它将显示变量引用的对象的类型,这可能与变量的类型不同(在本例中)。Object

对于基元类型,没有可用的解决方案,因为不知道变量中存储的类型的问题不存在。基元类型变量只能保存该类型的值。由于您必须在某个地方定义变量(或参数),因此您已经知道它的类型以及它可以容纳的值。基元值没有“基”类型,您可以使用类似于类型,类型是java中所有对象的基类型。Object


答案 2

感谢@Progman的方法。getClass()

class check{

    static Class typeof(Integer a)
    {
        return a.getClass();
    }
    static Class typeof(Character c)
    {
        return c.getClass();
    }
    static Class typeof(Float f)
    {
        return f.getClass();
    }
    static Class typeof(Double d)
    {
        return d.getClass();
    }
    static Class typeof(Long l)
    {
        return l.getClass();
    }
    static Class typeof(String s)
    {
        return s.getClass();
    }

}

所以现在我们检查基元和非基元类型

check.typeof(12) ; // class java.lang.Integer

check.typeof(12.23f) ; // class java.lang.Float

check.typeof('c') ; // class java.lang.Character

check.typeof("str") ; // class java.lang.String