Android ArrayList 中对象的调用方法<Object>

Android call method on object in ArrayList<Object>

在我的项目中,我用不同的对象填充了一个 ArrayList。

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

我的每个对象 -class 都包含一个名为 getType(){} 的方法,其中 returns 一个 int 值。现在我想在列表中的一个对象上调用这个方法。

objectList.get(i).getType();

这不起作用,可能是因为列表需要一个对象,而不是每个对象 -class 都有方法 getType(); ?

但是如何避免这个问题并在列表中的对象上调用方法呢?

Object 不包含 getType 您需要将其转换为对象类型。

在投射之前,您首先需要检查对象是否属于特定类型,以免发生崩溃

例子

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

您可以定义定义 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();
    // ...
}

如果您想实现您的要求,请将其设为包含该方法的您自己的对象的 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() 方法并且你可以访问它。

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 中得到的东西。