Массив интерфейса в Java - PullRequest
8 голосов
/ 13 февраля 2012

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

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

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

Module[] instances = new Module[20]

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

Ответы [ 4 ]

26 голосов
/ 13 февраля 2012

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

instances[0] = new MyModule();

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

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

Это отвечает на ваш вопрос?

6 голосов
/ 13 февраля 2012

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

Module[] instances = new Module[20];
for (int i = 0; i < 20; i++)
{
    instances[i] = new myClassThatImplementsModule();
}
4 голосов
/ 13 февраля 2012

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

2 голосов
/ 13 февраля 2012

Конечно, вы можете создать массив, тип которого является интерфейсом. Вам просто нужно поместить ссылки на конкретные экземпляры этого интерфейса в массив, созданные с именем или анонимно, перед использованием элементов в нем. Ниже приведен простой пример, который печатает хеш-код объекта массива. Если вы попытаетесь использовать какой-либо элемент, скажем, 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();
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...