2012-09-23 38 views
17

This bang link sau:Ý nghĩa của kiểu tham số là gì?

Các instantiation của một kiểu generic với đối số loại thực tế được gọi là một kiểu tham số. Ví dụ (của một loại tham số):

Collection<String> coll = new LinkedList<String>();

Vì vậy, các kiểu tham số là bao nhiêu?

  • Collection<String> hoặc
  • LinkedList<String>
+5

Làm thế nào về đọc câu tiếp theo trong liên kết mà bạn đã đưa ra: "Bộ sưu tập khai biểu thị một kiểu tham số, đó là một instantiation của các loại sưu tập chung, nơi nơi chủ E đã được thay thế bằng loại chuỗi cụ thể "? –

+0

@JBNizet, Vâng, sự nhầm lẫn của tôi xuất phát từ loại instantiation 'LinkedList '. Bình luận của bạn dưới đây làm rõ nó cho tôi. – wulfgarpro

Trả lời

22

Họ là cả hai loại tham số: loại mà lấy loại khác như tham số.

Thực tế là bạn có các loại khác nhau ở hai bên của biểu thức không liên quan và phải thực hiện với hành vi đa hình tức là vì LinkedList là loại phụ của Collection.

1

Cả hai công dụng của bộ sưu tập

Collection<String> 
LinkedList<String> 

nhiều loại tham số ở đây với String là loại được sử dụng.

11

Loại tham số thường là một lớp giao dịch với đối tượng khác mà không có loại thú vị. Kiểu có thể được định nghĩa bằng cách sử dụng "tên" biểu tượng và sau đó được truyền khi thể hiện của lớp được tạo ra.

Ví dụ:

class MyClass<T> { 
    private T obj; 
    public MyClass<T>(T obj) { 
     this.obj = obj; 
    } 
    public int getId() { 
     return obj.hashCode(); 
    } 
} 

Trong ví dụ trên MyClass kết thúc tốt đẹp đối tượng của bất kỳ loại và thực hiện phương pháp của nó hashCode() sử dụng thực tế là phương pháp này luôn luôn tồn tại.

Sau đây là cách lớp này được sử dụng:

int sid = new MyClass<String>("aaaa").hashCode();

Hãy chú ý rằng bạn không thể nói new MyClass<String>(123): thực tế là đối tượng được tạo ra với tham số String dictates loại lập luận constructor.

Quay lại ví dụ Collection<String> có nghĩa là "thu thập chuỗi". Điều này có nghĩa là bạn không thể thêm đối tượng thuộc loại khác vào bộ sưu tập này.

+0

nếu bạn có một trong đó T là String, thì bạn có thể vượt qua tất cả các lớp con của T, đúng không? – Ungeheuer

+0

Hầu như chính xác. Ngoại trừ thực tế là String là lớp cuối cùng và không thể được mở rộng. – AlexR

+0

Vì vậy, về cơ bản bất kỳ loại chung nào là các loại tham số, phải không? –

0

Loại tham số đại diện cho một loại tham số như Bộ sưu tập.

Loại tham số được tạo lần đầu tiên cần bằng phương pháp phản xạ, như được chỉ định trong gói này. Khi một kiểu tham số p được tạo, khai báo kiểu chung mà p instantiates được giải quyết, và tất cả các đối số kiểu của p được tạo đệ quy. Xem TypeVariable để biết chi tiết về quy trình tạo cho các biến kiểu. Việc tạo lặp lại kiểu tham số không có hiệu lực.

Trường hợp của các lớp thực hiện giao diện này phải thực hiện phương thức equals() tương đương với hai trường hợp chia sẻ cùng một kiểu khai báo chung và có tham số kiểu bằng nhau.

4

Có vẻ như loại chung và loại tham số là đồng nghĩa. Nhưng có vẻ như không được gọi ví dụ Box<Integer> một loại chung kể từ khi ý nghĩa của từ không chung chung nữa. Vì vậy, có lẽ là:

Một kiểu chung chung là việc kê khai với tham số kiểu trang trọng/s

class Box<T> { .. } 

Box<T> là một kiểu generic

Một loại tham số là tuyên bố với kiểu thực tế lập luận/s

Box<Integer> b;   

Box<Integer> là loại được tham số

Loại thô là khai báo loại chung mà không có đối số kiểu thực.

class Box<T> { .. } 
Box b; 

Box là một loại nguyên

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