来自 ServiceLoader 的 Iterable Object 是否被排序?
Is the Iterable Object from the ServiceLoader oredered?
我有一个非常简单的问题,但我找不到正确的答案。
所以在我的项目中我有一个抽象 class "JmjrstPlugin",其他一些插件从中继承。我正在使用 javas ServiceLoader 查找所有插件 classes,如下所示:
public static Iterable<JmjrstPlugin> getPlugins() {
return ServiceLoader.load(JmjrstPlugin.class);
}
关于我的问题:我从这个函数收到的 Iterable Object 是排序的吗?
(JmjrstPlugin 实现了 Comparable 接口并具有有效的 compareTo 方法)。
PS: 该项目目前处于无法测试的状态。
ServiceLoader
的 Javadoc 说:
The only requirement enforced by this facility is that provider classes must have a zero-argument constructor so that they can be instantiated during loading.
这意味着它不关心您的实施 类 是否实施 Comparable
。
此外,除非另有明确说明,否则 Set
通常是无序集合。 javadoc 没有指定,所以它是无序的。
如 Javadoc 中所述:
Each invocation of the iterator method returns an iterator that first yields all of the elements of the cache, in instantiation order
我有一个非常简单的问题,但我找不到正确的答案。
所以在我的项目中我有一个抽象 class "JmjrstPlugin",其他一些插件从中继承。我正在使用 javas ServiceLoader 查找所有插件 classes,如下所示:
public static Iterable<JmjrstPlugin> getPlugins() {
return ServiceLoader.load(JmjrstPlugin.class);
}
关于我的问题:我从这个函数收到的 Iterable Object 是排序的吗? (JmjrstPlugin 实现了 Comparable 接口并具有有效的 compareTo 方法)。
PS: 该项目目前处于无法测试的状态。
ServiceLoader
的 Javadoc 说:
The only requirement enforced by this facility is that provider classes must have a zero-argument constructor so that they can be instantiated during loading.
这意味着它不关心您的实施 类 是否实施 Comparable
。
此外,除非另有明确说明,否则 Set
通常是无序集合。 javadoc 没有指定,所以它是无序的。
如 Javadoc 中所述:
Each invocation of the iterator method returns an iterator that first yields all of the elements of the cache, in instantiation order