JDK1.5 - Painful bugs: Solved JDK1.5 - bogues douloureux: Résolu
Update: The defects have been solved in the latest release of 1.5 Mise à jour: Les défauts ont été résolus dans la dernière version de 1,5
I wanted to create a simple max function, something I wanted to do for quite sometime, which takes a variable number of Number & Comparable arguments, essetially Integer, Double etc., and returns the max of the same type. Je voulais créer une simple fonction max, ce que je voulais faire pour bien parfois, qui prend un nombre variable de Nombre et arguments comparables, essetially Integer, Double etc, et renvoie le maximum du même type. Also I would like to use auto-boxing to enable me to pass int & floats. Je souhaiterais également utiliser l'auto-boxing pour me permettre de passer int & flotteurs. With generics, varargs, auto-boxing available, I thought I was all set until I tried. Avec les génériques, varargs, auto-boxing, je pensais que j'étais prêt jusqu'à ce que j'ai essayé. I realized the dream is there but JDK 1.5 is still far from realizing the vision. J'ai réalisé le rêve est là, mais JDK 1,5 est encore loin de réaliser la vision.
The code shows an implementation which should, but doesn’t compile with jdk1.5. Le code montre une application qui devrait, mais ne compilent pas avec jdk1.5.
To compile use javac -source 1.5 MathUtil.java Pour compiler utilisation javac-source 1,5 MathUtil.java
It also shows a commented implementation (dumbed down version) which compiles. Il montre également une mise en œuvre des observations (dumbed version), qui compile. However it doesn’t allow me to realize the benefits of varargs in this case. Toutefois, il ne me permet pas de réaliser les avantages de varargs dans ce cas.
Also note that the errors messages are ambiguous (what an ambiguous spelling!). Notez également que les messages d'erreurs sont ambigus (ce qui a un double orthographe!). For example the first errors says: generic array creation Par exemple la première erreur dit: création tableau générique
Sure I can create a generic array if I use: T [] args, as shown in the commented code. Bien sûr je peux créer un tableau générique si j'utilise: T [] args, comme le montre le code commenté.
The other two errors messages are ambiguous too. Les deux autres messages d'erreurs sont trop ambiguë.
Here is the sample code with comments: Voici l'exemple de code avec des commentaires:
/** This class demonstrate few limitations in jdk implementation. / ** Cette classe montrer quelques limites dans la mise en œuvre jdk. The objective is * to implement a generic max function which takes any number of Number values and returns * the max. L'objectif est de mettre en oeuvre * une fonction générique max qui prend un certain nombre de valeurs numériques et retourne * maximum. It allows variable arguments so you can say max(1, 2, 3). Il permet variable arguments pour que vous puissiez dire max (1, 2, 3). It supports * autoboxing so you can use 1 instead of Integer.valueOf(1). Il soutient autoboxing * de sorte que vous pouvez utiliser 1 au lieu de Integer.valueOf (1). And it returns the * data of the same type as passes parameter, so type casting is not required, * using generics capability. Et il renvoie les données * du même type que la réussite paramètre, afin de type coulée n'est pas nécessaire, * utilisation de génériques capacité. * * This class doesn't compile. * * Cette classe ne compile pas. Errors are shown below. Les erreurs sont indiquées ci-dessous. * * * ** MathUtil.java:16: generic array creation * public static * MathUtil.java: 16: tableau générique création public static *T max(T … args) { * ^ * MathUtil.java:34: T max (T… args) (* ^ * MathUtil.java: 34: max(T[]) in MathUtil cannot be applied to (int,int,int,int) * ; no instance(s) of type variable(s) T exist so that argument type int conforms * to formal parameter type T[] * assert max(10, 2, 3, 5).compareTo(10) == 0;; * ^ * MathUtil.java:35: max (T []) dans MathUtil ne peut être appliquée à (int, int, int, int) *; aucun cas (s) de type variable (s) T existent afin que argument de type int * conforme à la forme paramètre de type T [] * Affirmer max (10, 2, 3, 5). CompareTo (10) == 0; * ^ * MathUtil.java: 35: max(T[]) in MathUtil cannot be applied to (double,double,do * uble,double); no instance(s) of type variable(s) T exist so that argument type d * ouble conforms to formal parameter type T[] * assert max(10.0, 2.0, 3.2, 5.0).compareTo(10.0) == 0;; * ^ * 3 errors * max (T []) dans MathUtil ne peut être appliqué à (double, double, do * uble, double); aucun cas (s) de type variable (s) T existent afin que argument type d ouble * conforme à la forme type de paramètre T [] * Affirmer max (10,0, 2,0, 3,2, 5,0). CompareTo (10,0) == 0; * ^ * 3 erreurs * */ * /
public class MathUtil { public class MathUtil (
/* This alternative dumbed down implementation works / * Cette option dumbed à la mise en œuvre de travaux
public static public staticT max(T args[]) { T max (T args []) (
assert args.length > 1; affirmer args.length> 1;
T max = args[0]; T max = args [0];
for(T arg:args) { (T arg: args) (
if(max.compareTo(arg) < 0) { if (max.compareTo (arg) <0) (
max = arg; Max = arg;
} )
} )
return max; retour Max;
} )
*/ * /public static public static
T max(T … args) { T max (T… args) (
assert args.length > 1; affirmer args.length> 1;
T max = args[0]; T max = args [0];
for(T arg:args) { (T arg: args) (
if(max.compareTo(arg) < 0) { if (max.compareTo (arg) <0) (
max = arg; Max = arg;
} )
} )
return max; retour Max;
} )public static void main(String … args) { public static void main (String… args) (
/* This alternative dumbed down implementation works / * Cette option dumbed à la mise en œuvre de travaux
assert max(new Integer[] {10, 2, 3, 5}).intValue() == 10; affirmer max (new Integer [] (10, 2, 3, 5)). intValue () == 10;
assert max(new Double[] {10.0, 2.0, 3.2, 5.0}).doubleValue() == 10.0; affirmer max (double [] (10,0, 2,0, 3,2, 5,0)). doubleValue () == 10,0;
*/ * /assert max(10, 2, 3, 5).compareTo(10) == 0; affirmer max (10, 2, 3, 5). compareTo (10) == 0;
assert max(10.0, 2.0, 3.2, 5.0).compareTo(10.0) == 0; affirmer max (10,0, 2,0, 3,2, 5,0). compareTo (10,0) == 0;
} )
} )
See more on Visiter le site bugs in jdk1.5 des bugs dans jdk1.5 in my next post. dans mon prochain poste.
Filed under Classé sous Java Software Logiciel de Java | |
| |
RSS 2.0 RSS 2,0 | |
Email this Article Envoyer cet article
You may also like to read Vous mai également à lire |





October 17th, 2006 at 7:43 am Octobre 17th, 2006 at 7:43 am
j aimerai approfondir mes connaissances en java j aimerai approfondir mes connaissances en java