thể trùng lặp:
What’s the difference between <?> and <? extends Object> in Java Generics?Danh sách <?> so với Danh sách <? extends Object>
tôi thấy rằng List<?>
và List<? extends Object>
hành động theo cách tương tự. Đối với tôi, không có sự khác biệt giữa chúng. Nếu tôi không đúng, bạn có thể giải thích cho tôi sự khác biệt không?
import java.util.ArrayList;
import java.util.List;
public class TestClass {
static void func1(List<?> o, Object s) {
o.add(null); // only null
o.add(s); // wrong
o.get(0); // OK
}
static void func2(List<? extends Object> o, Object s) {
o.add(null); // only null
o.add(s); // wrong
o.get(0); // OK
}
public static void main(String[] args) {
func1(new ArrayList<String>(), new Integer(1));
func2(new ArrayList<String>(), new Integer(1));
List<? extends Object> list1 = new ArrayList<Object>();
List<?> list2 = new ArrayList<Object>();
List<? extends Object> list3 = new ArrayList<String>();
List<?> list4 = new ArrayList<String>();
}
}
Không có sự khác biệt nào. 'extends Object' thừa và ngược lại, giống như viết' class F extends Object'. –
Tôi sẽ đặt cược chúng tương đương, vì tất cả các lớp trong Java ngầm mở rộng 'Object'. – murgatroid99
Không có sự khác biệt nào cả, đó là hậu quả của thiết kế/ngữ pháp ngôn ngữ. – nullpotent