"Travailler avec" vague est question, de sorte que vous êtes susceptible d'obtenir des réponses vagues.
L'inférence de Type n'est pas de lecture de l'esprit; c'est juste la résolution de contraintes. Le moins de contraintes de type disponibles, le plus vous êtes susceptible de rencontrer d'échec ou de résultat surprenant (déduire un type que vous ne vous attendiez pas, comme Object
.)
Diamant dit: les types j'ai besoin sont probablement déjà présente sur le côté gauche, pourquoi les répéter sur la droite.
Variable locale de type inférence dit: les types j'ai besoin sont probablement déjà présente sur le côté droit, pourquoi les répéter sur la gauche.
Méthode générique invocation dit: les types j'ai besoin sont probablement déjà présente dans les arguments, pourquoi répéter comme témoins.
Si suffisamment d'informations de type sont disponibles dans le programme sans qu'il soit manifeste constructeur arguments de type ou d'un type de cible sur la gauche, tout ira bien. Par exemple:
List<String> anotherList = ...
var list = new ArrayList<>(anotherList);
Ici, le compilateur est capable de déduire le paramètre de type d' ArrayList
en regardant le type de l'argument du constructeur (celui qui prend Collection<? extends E>
). Donc il en déduit T=String
sur les RHS, et est alors en mesure de déduire ArrayList<String>
sur la LHS.
En d'autres termes, le compilateur va faire ce qu'il peut compte tenu de l'information que vous avez donnée. Le moins d'informations que vous lui donner, le plus probable, il va échouer ou de ne pas faire ce que vous voulez.
Cela dit, je pense que vous vous êtes posé la mauvaise question. La question de la façon dont beaucoup vous pouvez laisser de côté ne doit pas être influencé par "quel sera le compilateur me laisser partir, mais de "l'importance des dégâts que je fais à la lisibilité de mon programme." La lecture du code est plus important que d'écrire du code. Laissant de côté tout ce que vous pouvez éventuellement laisser est peu probable afin de maximiser la lisibilité. Vous devez vous efforcer de laisser en assez pour s'assurer qu'aucun lecteur n'est confus lorsqu'il est confronté à votre programme.