更新:这似乎与 Eclipse 相关,而不是与 Hudson 相关,因此我相应地更新了问题。
在命令行上运行 Maven 时,我遇到了一些编译器错误,但我们组中的所有开发人员都让代码在 Eclipse 中运行良好(一些通用的复杂性,详情请参见下文)。这有何不同以及如何应对?
失败的代码如下所示:
299 private <T extends ProductClassDTO> List<T> convertProductClass(List<? extends ProductClassDTO> fromList) {
300 List<T> toList = new ArrayList<T>();
301 for (ProductClassDTO from : fromList) {
302 T to = convert(from);
303 toList.add(to);
304 }
305 return toList;
306 }
这是构建服务器上的错误:
[ERROR] ...java:[302,26] type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds T,com.volvo.protom.util.dto.ProductClassDTO
(我知道在 SO 中还有其他问题和答案,但它们似乎不适用于这个特定问题,因为更改为 T to = <T>convert(from)
不起作用,也许我应该做其他事情?)我我猜错误是指有几个convert
此类中的方法,并且适合多个方法?
谢谢!
更新 2:这些是转换签名:
private void convert(TestObjectDTO from, TestObjectDTO to);
private <T extends TestObjectDTO> T convert(TestObjectDTO from);
private void convert(ProductClassDTO from, ProductClassDTO to);
private <T extends ProductClassDTO> T convert(ProductClassDTO from);
private void convert(TestObjectTypeDTO from, TestObjectTypeDTO to);
private <T extends TestObjectTypeDTO> T convert(TestObjectTypeDTO from);
最佳答案
Eclipse 和 JDK javac 略有不同,参见 @maximdim的评论。始终从命令行运行以确保兼容性(尽管 Eclipse 的 javac 似乎更正确)。
关于javac 编译器差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8999151/