? is what is called a wildcard. It means anything that extends B.
When you write List, your List can contains only elements of type T.
When you write List extends String>, your List can contains any element that extends String
I hope I'm clear, since these concepts are complicated.