Java 通用代码在 eclipse 中构建,但不在 mvn 中构建(相同的 VM 版本)

标签 java eclipse maven generics

谁能帮我找出在 jdk1.6.0_45 中运行的这段代码有什么问题吗?

public class App {
    public static void main(final String args[]) {
        SortComparator<String, Integer> a = build();
    }

    private static <T, O extends Comparable<O>> SortComparator<T, O> build() {
        return null;
    }

    public class SortComparator<T, O extends Comparable<O>> implement Comparator<T> {
        @Override
        public int compare(final T o1, final T o2) {
            return 1;
        }
    }
}

这是一个纯Java语言的问题。为什么它不能编译?为什么在 Eclipse 中会这样?

  • 如果我改变SortComparator<String, Integer>Map<String, Integer>它可以编译。
  • 如果我添加参数 Class< O> arg 作为 build 的参数,它就会编译。
  • 如果我添加App. build() 到它编译的调用。

控制台输出:

incompatible types; no instance(s) of type variable(s) T,O exist so that build<T,O> conforms to SortComparator<java.lang.String,java.lang.Integer>

版本

  • Apache Maven 3.0.5(r01de14724cdef164cd33c7c8c2fe155faf9602da;2013-02-19 14:51:28+0100)
  • Java 版本:1.6.0_45,供应商:Sun Microsystems Inc.
  • 默认区域设置:es_ES,平台编码:Cp1252
  • 操作系统名称:“windows 7”,版本:“6.1”,架构:“x86”,系列:“windows”

最佳答案

因为SortComparator的返回类型不是元组(或Map.Entry)。

// Only takes one argument...
private <O extends Comparable<O>> SortComparator<O> build(final Class<O> clazz) {
  return null;
}

关于Java 通用代码在 eclipse 中构建,但不在 mvn 中构建(相同的 VM 版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20663007/

相关文章:

java - Intellij IDEA Community Edition - 断点不适用于在编译时编织方面的方法

java - Spring Boot 如何做查看 PDF

java - EditText 行与其他 View 重叠

java - 在eclipse中重命名多个文件

maven - build-helper-maven-plugin:无法执行目标 org.codehaus.mojo:versions-maven-plugin:2.2:set

java - Talend Build Job - 编译问题

java - 如何指示java gradle插件不使用根项目名称来构建模块jar?

java - Android - 图像缩放库

eclipse - cucumber 异常创建目录失败

使用 Jersey 测试框架进行测试的 Maven 依赖项