获取 Guice Provider 创建的所有实例
Get all instances created by Guice Provider
假设 ClassX
为:
class ClassX {
int value;
ClassX() {
this.value = new Random().nextInt(10);
}
//equals and hashCode depend on "value"
}
如果我有一个 Provider
作为:
@Provides
public ClassX createInstance() {
return new ClassX();
}
有没有办法注入所有创建的实例,所以我可以总结 total
中的所有值?我试过类似的东西:
@Inject
public Test(Set<ClassX> set) {
this.set = set
}
int total() {
return this.set.stream()
.map(classX -> classX.value)
.reduce(0, Integer::sum);
}
但是失败了。值得一提的是,我阅读了有关 MultiBinder
的内容,但我需要这些实例才能将它们添加到 Set
,因此,对于这种情况似乎不是一个选项。
仅在 Provider
中维护列表的简单情况是否可以解决问题?在 instances
.
附近使用您喜欢的线程安全方法
class MyProvider implements Provider {
Set<ClassX> instances = new HashSet<>();
public ClassX get() {
ClassX classX = new ClassX();
instances.add(classX);
return classX;
}
public Set<ClassX> getInstances() {
// ... calculate what you need
}
}
我认为没有任何方法可以告诉 Guice 保存它创建或提供的所有实例。
假设 ClassX
为:
class ClassX {
int value;
ClassX() {
this.value = new Random().nextInt(10);
}
//equals and hashCode depend on "value"
}
如果我有一个 Provider
作为:
@Provides
public ClassX createInstance() {
return new ClassX();
}
有没有办法注入所有创建的实例,所以我可以总结 total
中的所有值?我试过类似的东西:
@Inject
public Test(Set<ClassX> set) {
this.set = set
}
int total() {
return this.set.stream()
.map(classX -> classX.value)
.reduce(0, Integer::sum);
}
但是失败了。值得一提的是,我阅读了有关 MultiBinder
的内容,但我需要这些实例才能将它们添加到 Set
,因此,对于这种情况似乎不是一个选项。
仅在 Provider
中维护列表的简单情况是否可以解决问题?在 instances
.
class MyProvider implements Provider {
Set<ClassX> instances = new HashSet<>();
public ClassX get() {
ClassX classX = new ClassX();
instances.add(classX);
return classX;
}
public Set<ClassX> getInstances() {
// ... calculate what you need
}
}
我认为没有任何方法可以告诉 Guice 保存它创建或提供的所有实例。