2013-05-09 82 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()找出該類型的名稱。