Giả sử rằng trong mã của bạn Đoạn bạn đang sử dụng một lớp bên trong không tĩnh thay vì một lớp lồng nhau tĩnh như thế này: private class Node
, trong trường hợp đó, bạn sẽ phải cố gắng để nhanh chóng một Array
đó là không thể, chúng ta không thể nhanh chóng một Array
trong một lớp học chung, vì Generics không có bất kỳ thông tin liên quan đến loại của họ khi chạy, trong khi biểu hiện các mảng tạo định các loại nguyên tố.
Vì vậy, lý do tại sao sử dụng một Static Nested Class biên soạn, đó là các lớp học như vậy được coi như là một lớp "cấp cao nhất" (về hành vi):
Một lớp lồng nhau tĩnh tương tác với các thành viên dụ của lớp ngoài của nó (và các lớp khác) giống như bất kỳ lớp cấp cao nhất nào khác. Trong hiệu ứng , một lớp lồng nhau tĩnh là hành vi một lớp cấp cao nhất mà đã được lồng trong một lớp cấp cao nhất để tiện lợi đóng gói.
Bây giờ, chúng ta hãy xem tất cả những điều này vào xem xét, và trở lại các lỗi chính xác hiển thị bởi trình biên dịch:
Không thể tạo một mảng chung của TrieST<Value>.Node
Điều đó có nghĩa rằng loại của array
bạn muốn tạo là TrieST<Value>.Node
có loại thời gian chạy không được biết, do đó các loại khác nhau có thể được chèn vào mảng next
. rõ ràng hơn và cũng ví dụ giải thích có thể được tìm thấy trong Cannot Create Arrays of Parameterized Types
Trong khi đó, một lớp lồng nhau tĩnh được không hành xử như một lớp bên trong của TrieST<Value>
, do đó instiating một mảng bên Node
sẽ không là bất hợp pháp vì nó không phải của các loại TrieST<Value>.Node
, thuộc loại Node
(như nếu đó là lớp cấp cao nhất).
Trước tiên, bạn có biết tại sao mảng chung không được phép không? (ví dụ 'new ArrayList [5];' hiển thị lỗi này) –
immibis
có thể trùng lặp của [Làm thế nào để tạo một mảng chung?] (http://stackoverflow.com/questions/18581002/how-to-create-a-generic -array) – alfasin
Bạn có thể giải thích tại sao không có lỗi như vậy khi thêm tĩnh? – Peterxwl