Java Maven编译器与Eclipse编译器泛型的区别?
当我从Eclipse构建到maven构建时,我发现了项目中的许多问题。我使用2.5.1编译器插件 JDK是open-JDK-7 我在一个新项目中隔离了这个问题,并将其消除。问题是:Java Maven编译器与Eclipse编译器泛型的区别?,java,eclipse,generics,Java,Eclipse,Generics,当我从Eclipse构建到maven构建时,我发现了项目中的许多问题。我使用2.5.1编译器插件 JDK是open-JDK-7 我在一个新项目中隔离了这个问题,并将其消除。问题是: public class Test { public static void main(String[] args) { List<String> list = newList(); for(String name : sort(newList(list))) { Sys
public class Test {
public static void main(String[] args) {
List<String> list = newList();
for(String name : sort(newList(list))) {
System.out.println(name);
}
}
public static <T> List<T> newList() {
return new ArrayList<T>();
}
public static <T, E extends T> List<T> newList(Collection<E> list) {
return new ArrayList<T>();
}
public static <T> List<T> sort(List<T> list) {
return list;
}
}
公共类测试{
公共静态void main(字符串[]args){
List=newList();
for(字符串名称:排序(新列表(列表))){
System.out.println(名称);
}
}
公共静态列表newList(){
返回新的ArrayList();
}
公共静态列表newList(集合列表){
返回新的ArrayList();
}
公共静态列表排序(列表){
退货清单;
}
}
这无法使用javaC进行编译(但在Eclipse中工作),并说明以下错误:
[错误]无法执行目标org.apache.maven.plugins:maven编译器插件:2.5.1:compile(默认编译)on project测试:编译失败[错误]/home/username/workspace/projectx43/test/src/main/java/test/test.java:[11,24]错误:类型不兼容 这将起作用:
public class Test {
public static void main(String[] args) {
List<String> list = newList();
for(String name : sort(newList(list))) {
System.out.println(name);
}
}
public static <T> List<T> newList() {
return new ArrayList<T>();
}
public static <T> List<T> newList(Collection<? extends T> list) {
return new ArrayList<T>();
}
public static <T> List<T> sort(List<T> list) {
return list;
}
}
公共类测试{
公共静态void main(字符串[]args){
List=newList();
for(字符串名称:排序(新列表(列表))){
System.out.println(名称);
}
}
公共静态列表newList(){
返回新的ArrayList();
}
公共静态列表newList(Collection我记得2008年我们采用Java 5.0时,同样的问题也是一个问题。这与eclipse编译器处理泛型的方式略有不同有关
如果您检查上面的示例,JavaC编译器不允许传递泛型解析。例如,让我们看一下:
List<String> strings = sort(newList("A", "B", "C");
List strings=sort(newList(“A”、“B”、“C”);
JavaC在这里抱怨说sort不适用于List
<T> List<T> sort(List<T>) {...};
<T> List<T> newList(T ... elements) {};
列表排序(List){…};
列出新列表(T…元素){};
解决方案是引入一个变量,破坏上述表达式的美观:
List<String> list = newList("A", "B", "C");
List<String> strings = sort(list);
List List=newList(“A”、“B”、“C”);
列表字符串=排序(列表);
这取决于人们是否认为这是一个错误。我更喜欢Eclipse编译器版本,因为它可以生成更易于阅读的表达式。您是否在pom中将maven编译器插件的源和目标版本配置为1.7?()是的。正如我所说,我刚刚将E改为a?T,它可以工作。所以这不是Java版本的问题。我猜切换到1.5时它也会失败,但我还没有尝试。