So does 'nt this mean that you are trying to write
List<String> t = ArrayList<Object>();
as String extends Object where T is Object.
I am still not clear.
No, "List<? extends T> t" means that t is a list of Objects that extend T. If you use T=Object then it says:
List<? extends Object> t = new List<Object>();
This doesn't mean that you can fill in just anything for <? extends Object> (like String). List t has as type "? extends Object", not String. But you CAN say: "List<? extends Object> t = new ArrayList<String>();"