17

我想知道如果我在 Java 6 中编译,但有人在 Java 7 上运行程序,会使用 Java 6 或 7 版本的 Arrays.sort 吗?

这很重要,因为新的合并排序会引发 IllegalArgumentException,而旧的不会(请参阅比较方法违反其一般合同!仅限 Java 7

现在,可以使用 Arrays.useLegacyMergeSort 在 Java 7 中进行编译,但显然该标志不适用于 Java 6 - 我们希望在 Mac OS Snow Leopard(使用 6)上兼容。

出于某种原因(请参阅http://madbean.com/2006/target14/) -target 编译器标志似乎不会产生兼容的代码,因此我们宁愿在 Java 6 中编译。

有什么建议么?

4

1 回答 1

19

尝试设置系统属性

java -Djava.util.Arrays.useLegacyMergeSort=true ...

请注意,它不是来自 Arrays 公共 API,而是来自 src

   /**
     * Old merge sort implementation can be selected (for
     * compatibility with broken comparators) using a system property.
     * Cannot be a static boolean in the enclosing class due to
     * circular dependencies. To be removed in a future release.
     */
    static final class LegacyMergeSort {
        private static final boolean userRequested =
            java.security.AccessController.doPrivileged(
                new sun.security.action.GetBooleanAction(
                    "java.util.Arrays.useLegacyMergeSort")).booleanValue();
    }
于 2013-04-09T04:59:46.947 回答