2014-10-10 48 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