Java编译器找不到具有类型参数的泛型方法

Java编译器找不到具有类型参数的泛型方法,java,generics,Java,Generics,我花了一天的大部分时间试图理解为什么Java不能编译带有泛型类型参数的简单泛型方法,而只能在导入封闭类时编译。基本上,我在一个名为SpringApplicationContext的类中将Spring上下文操作作为静态方法公开: public static <T> List<T> listBeansOfType(Class<T> type) { return new ArrayList<T>(context.getBeansOfType(type

我花了一天的大部分时间试图理解为什么Java不能编译带有泛型类型参数的简单泛型方法,而只能在导入封闭类时编译。基本上,我在一个名为SpringApplicationContext的类中将Spring上下文操作作为静态方法公开:

public static <T> List<T> listBeansOfType(Class<T> type)
{
  return new ArrayList<T>(context.getBeansOfType(type).values());
}
公共静态列表listBeansOfType(类类型)
{
返回新的ArrayList(context.getBeansOfType(type).values());
}
当我从同一个包中的单元测试调用它时,它就工作了。下面是测试调用:

 List<DomainRepo> repos =
   SpringApplicationContext.listBeansOfType(DomainRepo.class);
列出回购协议=
SpringApplicationContext.listBeansOfType(DomainRepo.class);
然而,当我从另一个包中的代码调用它时,完全相同的代码失败。编译器说它找不到符号listBeansOfType(java.lang.Class)。我已经导入了这个类,但是还没有对这个方法进行静态导入


更奇怪的是,当我在一周前写这段代码时,它还能工作。从那时起,我不得不把它放在一边,同时进行发布过程。当我使用java 1.6使用maven或Eclipse编译时,也会发生同样的错误。任何提示都是非常受欢迎的。

确保您拥有所有需要的maven依赖项。如果Junit测试正常,但mvn编译失败,那么范围测试中可能会包含依赖项

    <dependency>
       <groupId>group-a</groupId>
       <artifactId>artifact-b</artifactId>
       <version>1.0</version>
       <scope>TEST</scope> <!-- would explain why you can run your code as junit -->
    </dependency>

a组
伪影-b
1
试验

检查“context”的类型以及定义方法getBeansOfType()的位置。它们可能作为mvn依赖项丢失。

确保您拥有所有需要的maven依赖项。如果Junit测试正常,但mvn编译失败,那么范围测试中可能会包含依赖项

    <dependency>
       <groupId>group-a</groupId>
       <artifactId>artifact-b</artifactId>
       <version>1.0</version>
       <scope>TEST</scope> <!-- would explain why you can run your code as junit -->
    </dependency>

a组
伪影-b
1
试验

检查“context”的类型以及定义方法getBeansOfType()的位置。它们可能作为mvn依赖项丢失。

这个类是公开的吗?这个类是公开的吗?非常感谢-它确实是一个不正确的依赖项,但没有这么简单。你的评论促使我翻阅依赖关系树,有一个还没有从发布版本更新到主开发版本。有一个过时的依赖项,如果没有所讨论的方法,它可能会引入较旧版本的SpringApplicationContext。但是,修复该依赖关系并没有改变任何症状。我认为我是Eclipse中某种不良缓存行为的受害者-在从~/.m2/存储库中删除包含
listBeansOfType()
方法的模块后(我以前安装并删除过它),并且在Eclipse中多次重建和更新Maven依赖项,最终决定玩得很好。没有其他变化…听起来像是依赖性问题。如果你有可能更新Eclipse靛蓝RC1和最新的Maven插件,你应该真正考虑它。一些讨厌的bug已经修复,Eclipse还将提供“强制更新”,这将清除您的存储库并重新蚀刻模块!对我来说,升级修复了WTP和Maven之间的一些主要问题。非常感谢-这确实是一个不正确的依赖项,但没有这么简单。你的评论促使我翻阅依赖关系树,有一个还没有从发布版本更新到主开发版本。有一个过时的依赖项,如果没有所讨论的方法,它可能会引入较旧版本的SpringApplicationContext。但是,修复该依赖关系并没有改变任何症状。我认为我是Eclipse中某种不良缓存行为的受害者-在从~/.m2/存储库中删除包含
listBeansOfType()
方法的模块后(我以前安装并删除过它),并且在Eclipse中多次重建和更新Maven依赖项,最终决定玩得很好。没有其他变化…听起来像是依赖性问题。如果你有可能更新Eclipse靛蓝RC1和最新的Maven插件,你应该真正考虑它。一些讨厌的bug已经修复,Eclipse还将提供“强制更新”,这将清除您的存储库并重新蚀刻模块!对我来说,升级修复了WTP和Maven之间的一些主要问题。