2015-06-11 14 views
6

Tôi dường như không thể hiểu đầy đủ tuyên bố sau.Bối rối về mã 'generics' sau đây

<T> T[] toArray(T[] a);

Mặc dù, tôi hiểu rằng tuyên bố trên là lời tuyên bố của một hàm mà nên có thể chấp nhận và trả về một mảng các đối tượng T loại ... Tôi không hiểu tại sao

1 - hai T 's không được bao quanh với <>

2 - có vẻ như là 2 loại trở lại, như trong <T> & T[]

Trả lời

6

<T> không phải là loại trả lại. Đó là một khai báo của tham số kiểu generic được sử dụng bởi phương thức. Khi nó được khai báo, nó có thể được sử dụng trong chữ ký phương thức mà không có <>;

+2

Và nó được bao quanh với '<>' bởi vì đó là cách định dạng của nó được xác định. – biziclop

+0

Vì vậy, tôi có thể viết cùng một khai báo mà không có '' đầu tiên và sau đó chỉ đơn giản là xung quanh 2 'T' khác với' <> '? Vì vậy, ví dụ tôi có thể khai báo ở trên với ' [] toArray ( [] a);' thay vào đó? – Grateful

+0

@Grateful Không, đó không phải là cú pháp Java thích hợp. Nếu phương thức đó là một phần của một lớp khai báo tham số chung T ('public class SomeClass '), bạn có thể bỏ qua '' từ khai báo phương thức, nhưng hai T khác vẫn giữ nguyên. – Eran

0

Loại trả lại là T[] và không phải <T>. Điều gì chỉ ra rằng phương pháp này là một loại chung và việc triển khai nên xử lý loại phù hợp.

Hai chữ T không được bao quanh bởi <> là kiểu tham số đầu vào và kiểu trả về. Trong trường hợp này cả hai đều giống nhau.

1
  1. tuyên bố rằng phương pháp được tham số hóa bởi T, ngược lại với lớp có chứa ví dụ. Các dấu ngoặc nhọn là một phần của cú pháp, không phải là biến tên

  2. Như trong 1, không phải là một kiểu trả về

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