Java编译器找不到类型参数的通用方法

时间:2011-12-18 17:37:45

标签: java generics

我花了大半的时间试图理解为什么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编译时会发生同样的错误。任何提示都将非常受欢迎。

1 个答案:

答案 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依赖而丢失。