在Java 6中编译,在7中运行 – 如何指定useLegacyMergeSort?

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

这很重要,因为新的mergesort会抛出IllegalArgumentException,旧的则不会抛出(请参阅Comparison方法违反了它的一般合约!仅限Java 7 )

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

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

有什么建议么?

尝试设置系统属性

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(); }