3

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

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

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

o.isArray () // Ok is type Array

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

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

例如:

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

4 回答 4

8

使用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) {
   //....
}
于 2013-05-09T12:26:32.310 回答
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
  } 
于 2013-05-09T12:32:09.097 回答
2

Java 中没有任何类型是引用类型和原始类型的超类型。但有一个替代方案。每个原始类型都有一个对应的不可变包装类型;例如

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

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

一旦你给一个类型的变量赋值,Object你就可以使用操作符来找出它的真实类型instanceof……或者使用getClass().getName()找出类型的名称。

于 2013-05-09T12:37:55.660 回答
1

另外只是看看

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

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

于 2013-05-09T12:36:07.520 回答