Массив интерфейса в Java

у меня есть интерфейс.

public interface Module {
        void init();
        void actions();
}

что происходит, когда я пытаюсь создать массив такой?

Module[] instances = new Module[20]

Как я могу реализовать этот массив?

4 ответов


да, это возможно. Необходимо заполнить поля массива объектами типа Module

instances[0] = new MyModule();

и MyModule - класс, реализующий интерфейс модуля. В качестве альтернативы вы можете использовать анонимные внутренние классы:

instances[0] = new Module() {
 public void actions() {}
 public void init() {}
};

это ответ на твой вопрос?


вам нужно будет заполнить массив экземплярами класса (классов), которые реализуют этот интерфейс.

Module[] instances = new Module[20];
for (int i = 0; i < 20; i++)
{
    instances[i] = new myClassThatImplementsModule();
}

вам нужно создать конкретный тип класса, который будет реализовывать этот интерфейс и использовать его в создании массива


конечно, вы можете создать массив, тип которого является интерфейс. Вы просто должны поместить ссылки на конкретные экземпляры этого интерфейса в массив, либо созданный с именем, либо анонимно, прежде чем использовать элементы в нем. Ниже приведен простой пример, который печатает хэш-код объекта Array. Если вы пытаетесь использовать любой элемент, скажите myArray[0].method1 (), вы получаете NPE.

public class Test {
 public static void main(String[] args) {
     MyInterface[] myArray = new MyInterface[10];
     System.out.println(myArray);
 }
 public interface MyInterface {
     void method1();
     void method2();
 }
}