Tôi đang cố gắng triển khai bộ sưu tập được liên kết bằng cách sử dụng Generics, giống như sau.Lỗi biên dịch tạo mảng chung từ lớp bên trong
public class A<E> {
private class B {
private B[] b;
private E item;
private B() {
this.b = new B[2];
}
} // end inner class B
} // end class A
A là bộ sưu tập và B là phần tử hoặc nút trong bộ sưu tập có tham chiếu mảng kế thừa/tiền nhiệm và một mục.
Tạo mảng không được phép. Lỗi tôi nhận được là generic array creation
. Tôi có đúng khi nghĩ rằng những gì nó thực sự tạo ra là một mảng của A<E>.B
?
Nếu không, điều gì gây ra lỗi?
Nếu có, làm thế nào tôi có thể giải quyết vấn đề này?
Tôi rõ ràng đã bỏ qua một số lượng đáng kể mã, nếu những gì tôi đã cung cấp là không đủ vui lòng cho tôi biết. Lời khuyên nào sẽ được đánh giá cao. Cảm ơn bạn.
CHỈNH SỬA 1: Tôi đã đề cập rằng loại tham số phải giống nhau trong A
như trong B
. Vì vậy, việc chuyển <E>
đến lớp bên trong là không thể, vì nó tạo ra E#2
và để lại A
với E#1
.
Không cụ thể một câu trả lời cho câu hỏi của bạn, nhưng nó sẽ là thiết kế tốt hơn để có hai biến ' người tiền nhiệm 'và' người kế thừa 'của loại B thay vì một mảng gồm hai phần tử. Làm cho lớp của bạn dễ đọc hơn. Tôi đoán nó cũng sẽ làm cho vấn đề của bạn biến mất? –
WRT Edit1, hãy thử một 'static class B' và bạn sẽ không có vấn đề đặt tên. Mảng vẫn sẽ không hoạt động, vì nó là Chung. –
Bạn cũng có thể giải quyết vấn đề này bằng cách sử dụng bộ sưu tập chung thay vì một mảng. – trutheality