And*_*Mao 2 java constructor dependency-injection guice guava
尝试使用Guice注入构造函数时,我有一个非常奇怪的错误.构造函数中有一个特定的行如下:
@Inject
public RoundRobinAssigner(
... arguments
) {
...stuff
assignments = Sets.synchronizedNavigableSet(Sets.<CountingEntry<String>>newTreeSet());
}
Run Code Online (Sandbox Code Playgroud)
注射时,这会失败.
1) Error injecting constructor, java.lang.NoSuchMethodError: com.google.common.collect.Sets.synchronizedNavigableSet(Ljava/util/NavigableSet;)Ljava/util/NavigableSet;
at edu.harvard.econcs.turkserver.util.RoundRobinAssigner.<init>(RoundRobinAssigner.java:46)
at edu.harvard.econcs.turkserver.util.RoundRobinAssigner.class(RoundRobinAssigner.java:40)
while locating edu.harvard.econcs.turkserver.util.RoundRobinAssigner
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除Sets.synchronizedNavigableSet()
包装,事情注入就好了.
@Inject
public RoundRobinAssigner(
... arguments
) {
...stuff
assignments = Sets.<CountingEntry<String>>newTreeSet();
}
Run Code Online (Sandbox Code Playgroud)
显然,这是次优的,因为我想使用同步集.有没有理由为什么Guice所谓的教练会表现得与正常教练不同?这些代码都没有任何编译问题,而且Sets
guava中的类也已经被加载了,所以我不知道是什么导致了这个.
我怀疑你只是看到了一个你在其他地方看到的问题 - 主要是因为Guice参与了通过反射加载课程时,Sets.synchronizedNavigableSet
不可用的"链接时间"错误显示在Guice的上下文中而不是在"普通"构造函数调用.
synchronizedNavigableSet
仅在13.0介绍-这可能是你正在编写针对这一点,但运行针对旧版本的番石榴?
归档时间: |
|
查看次数: |
2294 次 |
最近记录: |