我花了大半的时间试图理解为什么Java无法使用泛型类型参数编译简单的泛型方法,但只有在导入封闭类时才能编译。基本上,我将Spring上下文操作暴露为名为SpringApplicationContext的类中的静态方法:
public static <T> List<T> listBeansOfType(Class<T> type)
{
return new ArrayList<T>(context.getBeansOfType(type).values());
}
当我从同一个包中的单元测试中调用它时,它可以工作。这是测试电话:
List<DomainRepo> repos =
SpringApplicationContext.listBeansOfType(DomainRepo.class);
然而,当我从另一个包中的代码调用它时,完全相同的代码失败。编译器说它无法找到符号listBeansOfType(java.lang.Class)。我已导入该类,但我没有对该方法进行静态导入。
更奇怪的是,这段代码在我写这篇文章一周前就已经运行了。从那以后,我不得不在完成发布过程时把它全部放在一边。使用java 1.6使用maven或Eclipse编译时会发生同样的错误。任何提示都将非常受欢迎。
答案 0 :(得分:0)
确保您拥有所有需要的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>
检查“context”的类型以及定义方法getBeansOfType()的位置。它们可能因mvn依赖而丢失。