2012-01-15 21 views

Trả lời

11

Người đầu tiên chỉ có giá trị kể từ Java 7, và là tương đương với

List<String> list = new ArrayList<String>(); 

Nó chỉ ít tiết hơn.

Tương tự cho một thứ ba, đó là tương đương với

ArrayList<String> list = new ArrayList<String>(); 

và do đó nghiêm chỉnh tương đương với một giây.

Bạn nên thích cái đầu tiên, vì những lý do được đề cập trong câu trả lời cho những câu dưới đây: List versus ArrayList as reference type?

2

Có hai điểm để nhận xét ở đây:

1. mới Java 7 nhà khai thác kim cương cho phép bạn để khởi tạo một lớp chung mà không chỉ định tham số kiểu trên cả hai mặt. Vì vậy, hai đây là tương đương:

điểm
ArrayList<String> list = new ArrayList<String>(); 
ArrayList<String> list = new ArrayList<>(); 

2.The quan trọng hơn là sự khác biệt giữa hai instantiations đầu tiên. Điều thứ hai là rõ ràng:

ArrayList<String> list = new ArrayList<String>(); 

Trong cái đầu tiên:

List<String> list = new ArrayList<>(); 

bạn đang sử dụng thực tế là ArrayList là một subtype của List và do đó việc chuyển nhượng là hợp lệ. Tuy nhiên, trên đối tượng list mới, bạn chỉ có tập con của các phương thức được bao gồm trong List (vì đối tượng của bạn được khai báo là List sau khi tất cả), nhưng với các triển khai có trong ArrayList. Điều này được gọi là đa hình trong lập trình hướng đối tượng và cho phép bạn sử dụng một kiểu con của một lớp thay vì cha mẹ, nơi cha mẹ được mong đợi, để cung cấp các chức năng khác nhau.

4

Ba có phần tương đương:

List<String> list = new ArrayList<>(); 

Ở phía trên, bạn đang khai báo một biến mà thực hiện giao diện List mà sẽ chứa String yếu tố, và nhanh chóng nó với lớp bê tông ArrayList. Ngoài ra, bạn đang sử dụng cú pháp kim cương mới của Java 7, con trai bạn không phải viết lại String giữa số <>.

ArrayList<String> list = new ArrayList<String>(); 

Ở phía trên, bạn đang khai báo một biến của lớp bê tông ArrayList mà sẽ chứa String yếu tố, và nhanh chóng nó với lớp bê tông ArrayList sử dụng cú pháp "truyền thống" mà ủy nhiệm mà bạn chỉ định kiểu String giữa <>.

ArrayList<String> list = new ArrayList<>(); 

Ở phía trên, bạn đang khai báo một biến của lớp bê tông ArrayList mà sẽ chứa String yếu tố, và nhanh chóng nó với lớp bê tông ArrayList. Ngoài ra, bạn đang sử dụng cú pháp kim cương mới của Java 7, con trai bạn không phải viết lại String giữa số <>. Hãy chú ý rằng cú pháp kim cương (<>) sẽ chỉ hoạt động trong Java 7 trở lên, đối với các phiên bản Java trước bạn bị mắc kẹt với việc sử dụng cú pháp truyền thống (<the-type>) để tạo ra các generics.

Hai dạng cuối cùng là hoàn toàn tương đương; hình thức đầu tiên có một chút khác biệt vì bạn chỉ định rằng biến số list là loại List và không thuộc loại ArrayList - và đó là hình thức ưa thích, vì thực hành hướng đối tượng tốt cho rằng bạn nên program to an 'interface', not an 'implementation'.

Các vấn đề liên quan