2013-05-09 72 views
1

当在Android中使用java库时,我遇到了严重的问题。 我需要全局变量,我已经通过应用Singleton解决了这个问题。将变量用于Java中的任何类型和检查类型?

但现在我需要使用变量而不指定类型。 作为我使用Object o找到的解决方案。

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

o.isArray() // Ok is type Array

但要知道,如果它为int,双,...?

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

例如:

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] 

感谢你,

+0

谢谢大家。 instanceof是我的问题的完美解决方案。 – ephramd 2013-05-09 13:17:49

回答

6

使用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

+1为答案 – Raghunandan 2013-05-09 12:28:42

1

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

Java中没有类型是超类型的引用类型和基本类型。但有一个选择。每个基元类型都有一个相应的不可变包装器类型;例如

  • 布尔 - >布尔
  • INT - >整数
  • 炭 - >字符

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

一旦您将值指定给类型为Object的变量,您可以了解其真实性键入正在使用instanceof运算符...或者使用getClass().getName()找出该类型的名称。