如何将实现接口的类添加到ArrayList

时间:2017-11-02 04:59:04

标签: java android arraylist polymorphism

为了在接口中实现所有方法,我创建了一个实现接口的抽象类,然后让其他类扩展抽象类并仅覆盖所需的方法。

我正在为我的应用构建API /框架。

我想将一个接口 IMyInterface 的实例添加到ArrayList

ArrayList<Class<IMyInterface>> classes = new ArrayList<>();  
classes.add(MyClass.class);  

这是 MyClass

class MyClass extends AbstractIMyInterface {}  

这是 AbstractIMyInterface

class AbstractIMyInterface implements IMyInterface {}  

到目前为止,这似乎是不可能的。我上面的方法不起作用:

  

add (java.lang.Class<com.app.IMyInterface>)
in ArrayList cannot be applied to
(java.lang.Class<com.myapp.plugin.plugin_a.MyClass>)

如何使这项工作,即:添加一个将另一个类扩展为 ArrayList

的类

3 个答案:

答案 0 :(得分:4)

您需要使用通配符? extends IMyInterface

ArrayList<Class<? extends IMyInterface>> classes = new ArrayList<>();

ArrayList<Class<IMyInterface>> classes中,您只能添加Class<IMyInterface>

答案 1 :(得分:2)

您可以使用?

List<Class <? extends IMyInterface>> arrayList = new ArrayList<>();

答案 2 :(得分:1)

我可以添加这种方式,希望这是有帮助的

 public class MyClass extends AbstractIMyInterface {
    @Override
    public void onEating() {
        //from interface
    }

    @Override
    void onRunning() {
        //from abstract
    }

    public static void main(String[] args){

        ArrayList<IMyInterface> iMyInterfaces = new ArrayList<>();
        MyClass myClass = new MyClass();
        iMyInterfaces.add(myClass);

    }
}