public <T extends String> void doStuff1(List<T> param) {
}
public void doStuff2(List<? extends String> param) {
}
From my understanding, those two methods are identical. I am wondering which one is the correct way, why that is and if there is a scenario that "forces" me to use wildcards at all.