javac 编译器差异

标签 java generics javac

更新:这似乎与 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/

相关文章:

c# - 将类型从字符串变量发送到泛型方法

java - Java 编译器上下文中的 'generated source files' 是什么?

java - GWT 编译无法加载类

java - 将此空检查转换为 java 8 可选

java - 如何在一行中初始化 HashMap 列表列表?

java - 从 MyAbstractParameter 转换为 T 时未检查的转换警告

java - Ubuntu中使用javac编译时出错

java - 在我的示例中,同步和锁定之间有什么区别?

java - 当 EditText 为空时 Android 应用程序崩溃

c# - 从集合中通用创建逗号分隔的字符串列表