你怎么知道java中的变量类型?

时间:2010-04-20 11:17:24

标签: java variables types

假设我声明了一个变量:

String a = "test";

我想知道它是什么类型,即输出应该是java.lang.String我该怎么做?

7 个答案:

答案 0 :(得分:211)

a.getClass().getName()

答案 1 :(得分:31)

如果您想要名称,请使用Martin的方法。如果你想知道它是否是某个类的实例:

boolean b = a instanceof String

答案 2 :(得分:29)

我从搜索引擎那里学到了(我的英语非常糟糕,所以代码......) 如何获得变量的类型? 向上:

String str = "test";
String type = str.getClass().getName();
value: type = java.lang.String

这种方法:

str.getClass().getSimpleName();
value:String

现在示例:

Object o = 1;
o.getClass().getSimpleName();
value:Integer

答案 3 :(得分:21)

我想扩大马丁在那里的答案......

他的解决方案相当不错,但它可以调整,所以任何"变量类型"可以这样打印。(它实际上是值类型,more on the topic)。那就是说,"调整"对此可能是一个强有力的说法。无论如何,它可能会有所帮助。

他的解决方案是:

a.getClass().getName()

如果您希望它可以执行任何操作,您可以执行此操作:

((Object) myVar).getClass().getName()
//OR
((Object) myInt).getClass().getSimpleName()

在这种情况下,原语将简单地包装在Wrapper中。在这种情况下,您将获得原语的Object。

我自己就是这样用的:

private static String nameOf(Object o) {
    return o.getClass().getSimpleName();
}

使用泛型:

public static <T> String nameOf(T o) {
    return o.getClass().getSimpleName();
}

答案 4 :(得分:3)

我同意Joachim Sauer所说的,不可能知道(变量类型!不是值类型!),除非你的变量是一个类属性(并且你必须检索类字段,按名称获取正确的字段.. 。)

实际上对我来说,完全不可能任何a.xxx().yyy()方法给出正确的答案,因为根据您调用此方法的上下文,答案在完全相同的对象上会有所不同......

正如teehoo所说,如果您在编译时知道要测试的已定义类型列表,您可以使用instanceof,但您也会获得返回true的子类...

一种可能的解决方案也是激励自己实现java.lang.reflect.Field并创建自己的Field类,然后将所有局部变量声明为此自定义Field实现。但是你最好找到另一个解决方案,我真的很想知道为什么你需要变量类型,而不仅仅是值类型?

答案 5 :(得分:3)

使用java的运算符重载功能

class Test {

    void printType(String x) {
        System.out.print("String");
    }

    void printType(int x) {     
        System.out.print("Int");
    }

    // same goes on with boolean,double,float,object ...

}

答案 6 :(得分:1)

我认为我们有多种解决方案:

  • 的实施可能是一种解决方案。

为什么呢? 在Java中,每个类都继承自Object类本身。所以,如果你有一个变量,你想知道它会起作用的类型。

  • 的System.out.println(((对象)F).getClass()的getName());

  • Integer.class.isInstance(1985); //给出真实的

  • isPrimitive()

    public static void main(String[] args) {
    
     ClassDemo classOne = new ClassDemo();
     Class classOneClass = classOne();
    
     int i = 5;
     Class iClass = int.class;
    
     // checking for primitive type
     boolean retval1 = classOneClass.isPrimitive();
     System.out.println("classOneClass is primitive type? = " + retval1);
    
     // checking for primitive type?
     boolean retval2 = iClass.isPrimitive();
     System.out.println("iClass is primitive type? = " + retval2);
    }
    

这将给我们:

  1. FALSE
  2. TRUE
  3. 在此处了解更多信息: How to determine the primitive type of a primitive variable?

    https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

    http://docs.oracle.com/cd/E26806_01/wlp.1034/e14255/com/bea/p13n/expression/operator/Instanceof.html