The book is correct. You are right that you can use wildcards in return types for generics. However you cannot assign a Collection<? extends CharSequence> to a variable of type Collection<String>.
Let's assume your method has return type declared as Collection<? extends CharSequence>. Now you can return a value of type Collection<StringBuffer> because StringBuffer is a class implementing the CharSequence interface. The signature of the getLongWords() methods is happy with that. However you cannot assign a Collection<StringBuffer> to a variable of type List<String> since StringBuffer does not extend String (and you cannot extend String anyway b/c it is a final class).