2014-10-10 54 views
1

在Objective-C中,我們有稱爲id的通用數據類型。我們可以創建ID類型的一個可變的數組,然後我可以從不同的類添加到數組對象如下:通用數據類型標識

Bannana *banana = [[Banana alloc] init]; 
Apple *apple = [[Apple allloc] init]; 

NSMutableArray *myArray = [[NSMutableArray alloc] init]; 
[myArray addObject:banana]; 
[myArray addObject:apple]; 

問:什麼是Java中「ID」的相同呢?我怎樣才能在Java中完成上述內容?謝謝!

回答

1

您可以創建一個Fruitinterface並且有BananaApple類實現該功能。

那之後,你可以做到以下幾點:

Fruit banana = new Banana(); 
Fruit apple = new Apple(); 

List<Fruit> myList = new ArrayList<Fruit>(); 
myList.add(banana); 
myList.add(apple); 

您還可以使用Object類列表的類型,但你需要在你的對象從列表中的要小心他們將要Object類型和澆鑄的將被要求基於每個對象的類型:

List<Object> myArray = new ArrayList<Object>(); 
myArray.add(car); 
myArray.add(banana); 

for (Object o : myArray) { 
    if (o instanceof Car) { 
     Car c = (Car) o; 
     System.out.println("Car object found."); 
     // use Car object 
    } else if (o instanceof Banana) { 
     Banana b = (Banana) o; 
     System.out.println("Banana object found."); 
     // use Banana object 
    } else { 
     System.err.println("Unknown object found!"); 
    } 
} 
+0

也許我給了班一個壞榜樣,但假設他們是完全不同的,如香蕉類及汽車類,都將有完全不同的實現,並且接口不會是最好的方法... – Pupillam 2014-10-10 05:32:25

+0

@Pupillam:我已經添加了一些額外的代碼,演示如何使用對象列表(任何類型,只要它是一個對象,不是原始的)。請注意,使用'instanceof'運算符來確定從列表中檢索每個對象的類型。 – Voicu 2014-10-10 05:47:14

+0

您也可以將基元添加到列表中,在這種情況下,它們將[autoboxed](http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html)添加到其對應的對象包裝類中。所以'int'的值在將它存儲在列表中時變成了'Integer'對象。 – Voicu 2014-10-11 03:42:31

0

id是一種在Java的類似於Object。 Java中的所有東西(除了原始類型)都是對象。 如果你只是想用一個可變的列表存儲任何類型的,你可以做到這一點,但不推薦:

List myArray = new ArrayList(); 
myArray.add(banana); 
myArray.add(apple); 
+0

這種方法會給我編譯警告,這是不好的... – Pupillam 2014-10-10 05:32:53