繁体   English   中英

奇怪的Guice注射错误

[英]Strange Guice injection error

尝试使用Guice注入构造函数时,我有一个非常奇怪的错误。 构造函数中有一个特定的行如下:

@Inject
public RoundRobinAssigner(
        ... arguments
        ) {
            ...stuff

    assignments = Sets.synchronizedNavigableSet(Sets.<CountingEntry<String>>newTreeSet());
}

注射时,这会失败。

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

但是如果我删除了Sets.synchronizedNavigableSet()包装,那么注入就好了。

@Inject
public RoundRobinAssigner(
        ... arguments
        ) {     
            ...stuff

    assignments = Sets.<CountingEntry<String>>newTreeSet();

}

显然,这是次优的,因为我想使用同步集。 有没有理由为什么Guice所谓的教练会表现得与正常教练不同? 这些代码都没有任何编译问题,而且guava中的Sets类也已加载,所以我不知道是什么导致了这一点。

怀疑你只是看到了一个你在其他地方看到的问题 - 主要是因为Guice参与了通过反射加载类时, Sets.synchronizedNavigableSet的“链接时间”错误在Guice的上下文中显示在“正常”构造函数调用中。

synchronizedNavigableSet仅在13.0介绍-这可能是你正在编译对抗,而是针对旧版本的番石榴的运行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM