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
中得到的东西。
在我的项目中,我用不同的对象填充了一个 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
中得到的东西。