Win a copy of Programmer's Guide to Java SE 8 Oracle Certified Associate (OCA) this week in the OCAJP forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

why l.add() method is not working in this context?

 
sandeep sree
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
class p1
{
public static void main(String a[])
{
List<? extends String> l=new ArrayList<String>();
l.add("abc");

}
};
 
Christophe Verré
Sheriff
Posts: 14691
16
Eclipse IDE Ubuntu VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
"sandeep",
Welcome to the ranch. You may not be aware of the ranch Naming Policy. Please read it carefully and change your name accordingly (you need to set both first and last names). Thank you.
 
Christophe Verré
Sheriff
Posts: 14691
16
Eclipse IDE Ubuntu VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The parameter of add() is <? extends String> which means an unknown subtype of String is in there. String is not a great example. You should look at a simplier example like this :

So, l is a List<? extends A>. But what can you really put in there ? In the doSomething method, you don't know what kind of list it really is. Could you call l.add(new C()) ? C extends A. But we declared the list as containing B objects. With this type of wildcards, you can get objects from a collection, but not add any.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic