作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我花了一天的大部分时间试图理解为什么 Java 不能编译带有泛型类型参数的简单泛型方法,而只能在导入封闭类时编译。基本上,我在名为 SpringApplicationContext 的类中将 Spring 上下文操作公开为静态方法:
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 进行编译时,也会出现同样的错误。任何提示都将非常受欢迎。
最佳答案
确保您拥有所有需要的 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>
检查“上下文”的类型以及方法 getBeansOfType() 的定义位置。它们可能作为 mvn 依赖项而丢失。
关于java - Java 编译器找不到带有类型参数的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8553475/
我是一名优秀的程序员,十分优秀!