public List<Integer> getInteger()
3 Réponses :
comme pojo code> n'est pas déclaré comme un
Map mapOfInteger = new Map(); // no generics
Set<String> entries = map.entrySet(); // gives a warning, not an error.
Nous avons donc enfin une différence définitive et claire entre pojo code> et
pojo > Code>.
Juste un commentaire: votre ligne avec map.keySet () code> n'est pas aussi fort d'un exemple d'original, où la méthode renvoie une liste définie
Keyset () Code> ne renvoie que
SET
k code> fourni, qui m'a toujours fait du sens. Celui-ci est plus un head-scratchers.
@Markotopolnik Entrée () code> est un meilleur exemple.
@Peterlawrey J'aime bien et clair, donc j'ai trouvé la référence JLS qui sauvegarde vos réclamations ;-)
Il s'agit d'une affectation non cochée qui n'est pas traitée comme une erreur pour des raisons de compatibilité. P>
voir Interopérant avec le code hérité P>
En réalité, la mission est légale, mais elle génère un avertissement non contrôlé. P> blockQuote>
J'ai trouvé une référence dans le JLS 4.8 < / a> qui sauvegarde ce que @Peterlawrey dit: p>
Le type d'un constructeur (§8.8), méthode d'instance (§8.4, §9.4) ou champ non statique (§8.3) m d'un type brut de type C qui n'est pas hérité de ses superclasses ou de ses superinterfaces est le RAW Type qui correspond à l'effacement de son type dans la déclaration générique correspondant à c. p>
blockQuote>
Donc, toutes les méthodes d'instance de votre objet code> pojo code> sont effacées, y compris celles qui ne font pas référence au type Les paramètres de type d'une méthode [...] (§8.4.4) et le type de retour (§8.4.5) d'une méthode, subissent également une effacement si la signature de la méthode [...] est effacée. p>
blockQuote>
t code> de
pojo
Votre déclaration de classe n'a aucun sens:
POJO code> --- Ceci contraint le type paramètre à un sous-type de B>
code> et
charcuternence code>, mais à partir de son nom, il semble que vous vous attendiez à ce que cela permettrait n'importe quel b> des deux.
@Markotopolnik Cela fonctionne si POJO est instancié sans génériques.
@assylia Comment est venu? Dans ce cas, il ignore toute information de type générique b>, même celles qui n'ont rien à voir avec le type de classe Param? Étrange.
@assylias l'a vérifié, émet simplement un avertissement. Ne savait pas à ce sujet. Si c'est une méthode statique, alors il émet une erreur. C'est digne d'un puzzler Java.
@Farmor J'ai considérablement édité votre question pour fournir un exemple plus simple qui montre le même comportement. N'hésitez pas à annuler si vous ne l'aimez pas.
@Markotopolnik - Ils pourraient probablement faire tout un livre de Puzzlers de Generics :-(