2015-01-26 84 views
-1

在我的項目中我用不同的對象填充ArrayList。Android Array對象在ArrayList中的調用方法<Object>

private List<Object> objectList = new ArrayList<Object>(); 
... 
objectList.add(StudentObject); 
objectList.add(ManagerObject); 
objectList.add(AnimalObject); 

我的每個對象類都包含一個名爲getType(){}的方法,它返回一個int值。現在我想在列表中的一個對象上調用這個方法。

objectList.get(i).getType(); 

這是不可能的工作,也許是因爲列表期望一個對象,而不是每個對象類都有方法getType(); ?

但我該如何避免這個問題,並調用列表中的對象的方法?

+0

'我的每個對象類都包含一個名爲getType(){}'的方法,否,因爲你的數組列表被聲明爲包含'Object's,它沒有這個方法。請參閱http://docs.oracle.com/javase/tutorial/java/generics/ – njzk2 2015-01-26 18:37:10

回答

0

如果你想達到你的要求,然後使它的ArrayList自己的對象中包含該方法。

public abstract class MyTypeObject extends Object 
{ 
    abstract int getType(); 
} 

public class MyObject1 extends MyTypeObject 
{ 
    private int type = 201; 

    int getType() 
    { 
     return type; 
    } 
} 

然後,而不是傳遞對象,傳遞MyTypeObject。這強制任何MyTypeObject具有getType()方法。然後你可以像這樣分配你的ArrayList。

private List<MyTypeObject> objectList = new ArrayList<MyTypeObject>(); 

然後你可以保證它有你的getType()方法,你可以訪問它。

+0

這就是我一直在尋找的,非常感謝! – RyuZz 2015-01-26 18:46:33

0

Object不包含getType您需要將其轉換爲它的對象類型。

你先投你,所以你沒得到崩潰

例如

if(objectList.get(i) instanceof StudentObject){ 
    StudentObject student = (StudentObject)objectList.get(i) 
    student.getType(); 
} 
0

您可以定義定義getType()接口或超類,並且有你需要檢查的對象是在特定類型的前你的每個類都實現或繼承它。

例子:

public interface Typed { 
    public int getType(); 
} 

public class Student implements Typed { 
    public int getType() { 
     // code here 
    } 
} 

// similar definitions for other classes 

// later in some other code... 
List<Typed> list = new ArrayList<Typed>(); 
list.add(new Student()); 
// add other objects... 

// then this... 
int typei = list.get(i).getType(); 

// or maybe this... 
for (Typed object : list) { 
    int type = object.getType(); 
    // ... 
} 
0

Java中的Object沒有getType方法。如果要插入此列表中的所有對象都有方法getType,請考慮使用Interface。然後,您可以插入接口,而不是將Objects插入您的列表中。

例如:

public interface MyInterface { 
    public int getType(); 
} 

有每個類的實現此接口。現在

public class StudentObject implements MyInterface { 
    ... 
    @Override 
    public int getType() { 
     ... 
    } 
    ... 
} 

,在您的列表:

private List<MyInterface> objectList = new ArrayList<MyInterface>(); 
... 
objectList.add(StudentObject); 
objectList.add(ManagerObject); 
objectList.add(AnimalObject); 

現在,從objectList加入每一件事情必須MyInterface類型。同樣,從objectList讀取的所有內容都將是MyInterface,您可以撥打getType

做到這一點的另一種方式是鑄造東西,你從你的objectList

+0

這很好用! – RyuZz 2015-01-26 18:52:55