【问题标题】:Android call method on object in ArrayList<Object>ArrayList<Object>中对象的Android调用方法
【发布时间】:2015-03-25 05:46:19
【问题描述】:

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

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

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

objectList.get(i).getType();

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

但是我怎样才能避免这个问题并在列表中的对象上调用方法呢?

【问题讨论】:

标签: java android object methods arraylist


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    在你先施法之前,你需要检查对象是否属于某种类型,这样你就不会崩溃

    例子

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        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 中得到的东西投射出来。

        【讨论】:

          猜你喜欢
          • 2013-06-08
          • 1970-01-01
          • 2013-08-28
          • 2017-03-09
          • 2017-08-17
          • 1970-01-01
          • 2015-05-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多