Giả sử các lớp sau đây không:Java Generic class mở rộng loại parametrized
class A {
public void foo() { ... };
...
}
class A1 extends A { ... };
class A2 extends A { ... };
...
class A1000 extends A { ... };
bây giờ, chúng ta cần tạo một biến thể của mỗi lớp Axx đó sẽ ghi đè phương pháp "foo". Ý tưởng cơ bản là:
class B<T extends A> extends T {
@Override public void foo() { ... };
}
Nhưng có vẻ như không thể mở rộng lớp học từ một trong các loại tham số của chúng.
Mục tiêu là để bỏ qua nhu cầu sau mã mới:
class B1 extends A1 { @Override public void foo() { ... }; };
class B2 extends A2 { @Override public void foo() { ... }; };
....
class B1000 extends A1000 { @Override public void foo() { ... }; };
và cho phép những câu như:
...
B<A643> b643 = new B<A643>;
b643.foo();
...
Bất kỳ gợi ý?
Cảm ơn rất nhiều.
Không nơi nào trong mã của bạn là tham số loại 'T' thực sự được sử dụng cho bất kỳ thứ gì, do đó bạn chỉ có thể loại bỏ nó khỏi mã của bạn hoàn toàn. Ngoài ra, nếu 'T' thực sự là một tham số kiểu chính thức, thì' B extends T' không hợp lệ. – scottb
Mục tiêu là bỏ qua sự cần thiết của mã mới sau đây: lớp B1 mở rộng A1 {Override public void foo() {...}; }; lớp B2 mở rộng A2 {Override public void foo() {...}; }; ... lớp B1000 mở rộng A1000 {Override public void foo() {...}; } ;. Làm rõ về câu hỏi. –
Tôi cảm thấy như những gì OP đang cố gắng làm là có một cách phổ biến để mở rộng bất kỳ loại nhất định với việc thực hiện này 'foo'. Ví dụ, 'A1',' A2', ... 'A1000' là hoàn toàn (hoặc chủ yếu) không liên quan và mỗi phương thức riêng của chúng, và' B1', 'B2', ...' B1000' tương tự không liên quan, mỗi phương thức có cùng một phương thức giống như các đối tác 'Annn' * của chúng cũng như * thực hiện phổ biến này của' foo' (có thể hoặc không thể ghi đè hoặc sử dụng các thành viên được bảo vệ của 'A'). – TheHansinator