Non pas forcement à quoi ça sert l’inférence de type mais la fonction possède un type de retour non? Il va obligatoirement me refuser de retourner quelque chose qui ne correspond pas au type c'est simple je je retourne (100,2), quand même il sait vérifier que le type de retour est un décimal et qu'il existe un constructeur qui prend deux paramètres dont deux entier, de la même manière qu'il ne refuse pas de faire decimal salary=(100,3) il va accepter les deux valeur entre parenthèses et tout est réglé. La JVM sait faire de l’inférence de type depuis l'entrée des generic et maintenant avec les lambda il sait bien reconnaître les types des paramètres des fonction.
La bonne chose que j'ai aimé quand j'ai vu le document c'est le fait de ne pas être obligé d'utiliser la fonction equals pour comparer, certes on la crée pour la définir mais on peut utiliser l'operateur == au lieu de équals. Moi si on m'a dit de proposer j'aurais proposé à ce qu'on nous donne la possibilité de ne pas être toujours obligé de définir un constructeur, et éxiger un constructeur primaire, un peu comme en C# 6 mais pas forcement la même chose car ici ça doit être le critère de reconnaissance d'un Value Type. Tout se fait automatiquement après, et vu qu'ici le plus important c'est simplifier la manipulation des valeurs il faut toujours simplifier les choses. Voila comment je vois que les choses devraient être:
Manipulation;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 final class Point(int x, int y){ //Le reste se fait automatiquement x et x sont public private int c;//Si je veux avoir une valeur privé boolean equals(Point p){ return this.x==p.x&&this.y==p.y} public static Point manipuler(){ int a; int b; //traitement return (a,b); //inférence de type } public static void maFunction(Point p, boolean b, double b){ //traitement } } final class MaClass(char a, double f, boolean b){ }//ça peut suffir déjà, si c'est pour manipuler un value Type de maClass
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Point p1=(2,4),p2=(5,6),p3=(2,4); boolean b=p1==p3; boolean b2=p1==(2,4);//inférence de type boolean b3=p1.equals((2,3));//inférence de type /*ERROR*/ boolean b2=(2,4)==p1;// Possible de faire de linférence de type mais en fait il faut qu'on sache que c'est la fonction equals qui est appelé //alors ça sera moche qu'en compilation il va transformer (2,4)==p1 en p1.equals((2,4)) ou tout simplement il va créer une nouvelle Value Type /*ERROR*/ boolean b4=(2,4)==(2,4)// pas de base pour une inférence de type Point a=Point.manipuler(); //Si après import statc Point Point a=manipuler(); maFunction((3,5),true,2.4);//inference de type //On peut faire du casting Point2D p=(Point2D)(Point)(2,3); //Je ne peux pas faire /*ERROR*/ Point2D p=(Point2D)(2,3);//ERROR il ne connait pas (2,3) et s'il existe déjà un contructeur pas besoin de casting alors MaClass M=('d',4.5,true);
Si quelqu'un sait comment soumettre une proposition j'allais envoyer ça, qu'en dites vous de cette proposition?
Partager