在Java中对任何类型使用变量并检查其类型?

在Java中对任何类型使用变量并检查其类型?,java,android,variables,object,var,Java,Android,Variables,Object,Var,我在实现Android中使用的java库时遇到了严重的问题。 我需要全局变量,我已经通过应用Singleton解决了这个问题 但是现在我需要在不指定类型的情况下使用变量。 作为一个解决方案,我发现使用对象o 对象o,如何检查o的类型? o.isArray()//Ok是数组类型 但是要知道它是否是int,double 使用任何类型的对象或变量的另一种解决方案 例如: public String arrayToString (Object o) { if (o.getClass (). is

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

但是现在我需要在不指定类型的情况下使用变量。 作为一个解决方案,我发现使用对象o

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

o.isArray()//Ok是数组类型

但是要知道它是否是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]
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) {
   //....
}

谢谢,

使用
操作符的
实例

例如:

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]
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) {
   //....
}

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
  } 

另外,只要看看


有九个预定义的类对象来表示八种基本类型和void。它们是由Java虚拟机创建的,与它们所表示的基本类型具有相同的名称,即boolean、byte、char、short、int、long、float和doubleJava中没有一种类型是引用类型和基元类型的超类型。但还有一种选择。每个原语类型都有一个对应的不可变包装器类型;e、 g

  • 布尔->布尔
  • 整数->整数
  • 字符->字符
因此,您可以将
int
包装为
整数
,然后将结果值分配给
对象
类型的变量。(事实上,Java的现代版本提供了自动执行“装箱”和“取消装箱”的语法糖;请参阅


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

谢谢大家。instanceof是解决我问题的完美方法。