【问题标题】:Use variable to any type and check type of this in Java?在Java中对任何类型使用变量并检查它的类型?
【发布时间】:2013-05-03 22:11:43
【问题描述】:

在实现用于 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]

谢谢你,

【问题讨论】:

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

标签: java android variables object var


【解决方案1】:

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

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

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

Object 类型的变量赋值后,您可以使用instanceof 运算符...或使用getClass().getName() 找出类型的名称来找出它的真实类型。

【讨论】:

    【解决方案2】:

    另外只是看看

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

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

    【讨论】:

      【解决方案3】:

      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
        } 
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-04-28
          • 2013-05-14
          • 1970-01-01
          • 2021-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-26
          • 2010-10-02
          相关资源
          最近更新 更多