Является ли итерируемый объект из ServiceLoader направленным? - PullRequest
0 голосов
/ 27 мая 2018

У меня довольно простой вопрос, но мне не удается найти правильный ответ.

Так что в моем проекте у меня есть абстрактный класс "JmjrstPlugin", от которого наследуются некоторые другие плагины.Я использую javas ServiceLoader, чтобы найти все классы плагинов, как показано ниже:

public static Iterable<JmjrstPlugin> getPlugins() {   
     return ServiceLoader.load(JmjrstPlugin.class);
}

На мой вопрос: является ли Итерируемый объект, который я получаю из этой функции, упорядоченным.(JmjrstPlugin реализует интерфейс Comparable и имеет работающий метод сравнения.)

PS: проект в настоящее время находится в состоянии, которое делает невозможным его тестирование прямо сейчас.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Как задокументировано в Javadoc :

Каждый вызов метода итератора возвращает итератор, который сначала возвращает все элементы кэша в порядке создания экземпляров

0 голосов
/ 27 мая 2018

Javadoc из ServiceLoader говорит:

Требование only , установленное этой возможностью, состоит в том, что классы провайдера должны иметь конструктор с нулевым аргументом, такчто они могут быть созданы во время загрузки.

Это означает, что не имеет значения, реализуют ли классы реализации Comparable или нет.

Кроме того, Set обычнонеупорядоченная коллекция, если явно не указано иное.Javadoc не указывает, поэтому он неупорядочен.

...