使用变量到任何类型并在Java中检查它的类型?

时间:2013-05-09 12:23:22

标签: java android variables object var

在实现用于Android的java库时遇到严重问题。 我需要全局变量,我通过应用Singleton来解决这个问题。

但现在我需要使用变量而不指定类型。 作为我发现使用Object o。

的解决方案

对象o,我如何检查o的类型?

o.isArray () // Ok is type Array

但要知道它是否为int,double,......?

使用任何类型的Object或变量的另一种解决方案?

例如:

public String arrayToString (Object o) {
    if (o.getClass (). isArray ()) {
        Arrays.toString return ((Object []) o);
        Else {}
        o.toString return ();
    }
}

Object [] a = (Object []) LIB.getConf ("test");
a_edit [0] = "new value";
a_edit [1] = 2013;

x.arrayToString ("test") / / return test
x.arrayToString (1989) / / return 1989
x.arrayToString (a) / / return [new value, 2013]

谢谢你,

4 个答案:

答案 0 :(得分:7)

使用instanceof运算符。

例如:

if (o instanceof Integer) {
   //do something
} else if (o instanceof String) {
   //do something else
} else if (o instanceof Object[]) {
   //or do some other thing
} else if (o instanceof SomeCustomObject) {
   //....
}

答案 1 :(得分:2)

Java语言提供运算符“instanceof”来检查对象的运行时类型。您可以检查对象是否属于任何类型,只需执行以下操作即可:

    if (o instanceof String) {
      // The Object is an instance of a String
    } 
    else if (o instanceof Double) {
      // The Object is an instance of a Double
    } 
    // And so on..

另一个想法是使用getClass,它以类似的方式工作:

  if (o1.getClass().equals(o2.getClass())) {  
    // The objects have the same class type
  } 

答案 2 :(得分:2)

Java中没有类型是引用类型和基本类型的超类型。但还有另一种选择。每个基本类型都有一个相应的不可变包装类型; e.g。

  • 布尔值 - >布尔
  • int - >整数
  • char - >字符

因此,您可以将int包装为Integer,然后将结果值分配给Object类型的变量。 (事实上​​,Java的现代版本提供了自动执行“装箱”和“取消装箱”的语法糖;请参阅http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

Object类型的变量分配值后,您可以使用instanceof运算符...或使用getClass().getName()查找其真实类型的值输出类型的名称。

答案 3 :(得分:1)

另外还有一点......

http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#isPrimitive()

“有九个预定义的Class对象来表示八种基本类型和void。这些是由Java虚拟机创建的,并且与它们所代表的基本类型具有相同的名称,即boolean,byte,char,short, int,long,float和double。“