2010-08-16 7 views
2

J'ai une petite question comme ci-dessous: Voici un simple exemple sur cette questions entières: (! Un très bon livre)types bruts, non borné wilcard et borné wildcard

List a = new ArrayList(); 
List <?> b; 
List <? extends Object> c; 

Selon Java SCJP par khalid Mughal :

a = b; // ok. Widening conversion. 
b = a; // ok too. No unchecked warning. 

b = c; // ok 
c = b; // ok 

c=a; // ok but now will issue a unchecked warning. // clause 1 

Je comprends que tous les types de base (par exemple a) lorsqu'ils sont affectés à toute référence wilcard bornées, un avertissement est décochée questions (puisque le contenu de ce type pourrait être une première quoi que ce soit).

Ma question est depuis c est le plus haut de la limite supérieure (? Prolonge objets), il ne faut pas un pouvoir attribué à c sans cet avertissement?

+0

Je n'ai aucune idée de ce dont il s'agit, mais voulez-vous vraiment dire la limite supérieure la plus élevée? Habituellement, en tapant, il serait plus naturel de parler de la limite supérieure _least_ (la jointure de l'ensemble des types par rapport à un ordre partiel par-dessus). – Gian

+1

Bonjour, bienvenue sur stackoverflow.com! Malheureusement, votre question n'a pas de sens comme c'est maintenant. S'il vous plaît clarifier (au moins un lien vers le poste que vous citez, réparez la répétition entre 2. et 3.). Sinon, votre message sera fermé. – sleske

Répondre

1

Si je comprends bien votre question (et je ne pense pas que je fais), il semble y avoir deux cas où l'interaction avec les types premières pourrait causer un avertissement sans contrôle se produire, selon this page:

  • Une invocation d'une méthode ou d'un constructeur d'un type brut génère un avertissement non contrôlé si l'effacement modifie l'un des types de l'un des arguments de la méthode ou du constructeur.
  • Une affectation à un champ d'un type brut génère un avertissement décoché (§5.1.9 de) si l'effacement change le type du champ.

Donc, la réponse à votre question semble essentiellement être « erasure pourrait entraîner des avertissements non contrôlés en présence de types bruts ». Autant que je sache, cela est plus susceptible de se produire lorsque des types imbriqués sont utilisés - je ne vois nulle part ailleurs dans la définition de l'effacement qui ferait probablement changer un type, mais quelqu'un d'autre peut peut-être suggérer n'est pas la source de ceci.

+0

Merci pour votre réponse. Désolé pour la confusion. S'il vous plaît voir mon texte à nouveau. –