Compiler en Java 6, en 7 - comment spécifier useLegacyMergeSort?

Je me demandais si je compile en Java 6, mais quelqu'un exécute le programme sur Java 7, le Java 6 ou 7 version de Tableaux.trier être utilisé?

C'est important parce que la nouvelle mergesort déclenche une IllegalArgumentException, et l'ancien n'a pas (voir Méthode de comparaison de la viole son contrat! Java 7 seulement)

Maintenant, il est possible de compiler en Java 7 à l'aide de Tableaux.useLegacyMergeSort, mais il est évident que l'indicateur n'est pas disponible pour la version 6 de Java - et nous voulons être compatible sur Mac OS Snow Leopard (qui utilise 6).

Pour une raison quelconque (voir http://madbean.com/2006/target14/) la cible du compilateur drapeau ne semble pas pour produire du code compatible, donc on préfère compiler en Java 6.

Des suggestions?

Le java.util.Arrays.useLegacyMergeSort propriété est spécifiée au moment de l'exécution, pas de compilation. Quels problèmes rencontrez-vous lorsque vous l'utilisez avec une version 6 de Java VM?
Vous utilisez la version 7 à la version 7 de la JVM, même si vous compilez par rapport à la version 6. Il suffit de régler le Système de propriété, alors vous aurez toujours utiliser la version 6 de tri.
si la nouvelle mergesort jette un IAE, c'est parce que le code est mauvais, s'il est en cours d'exécution dans la version 6 de Java ou Java 7. Ce que vous devez faire, c'est la fixation de la question, à quel point votre code sera exécuté le même dans les deux environnements.
Oui. Oui, il est.
C'est le point de contrats: Vous ne pouvez être sûr que l'autre partie s'acquitte de ses promesses si vous le faites, trop. Auparavant, elle a rempli (ou semble le faire – et je suppose que le pourrait être incompatible résultats avant), même si vous n'avez pas, mais cela a changé maintenant pour une meilleure mise en œuvre.

OriginalL'auteur Alex | 2013-04-09