Trong mã một của tôi đã như sau cha trừu tượngSử dụng loại chung của một phân lớp trong lớp siêu trừu tượng của nó?
public abstract class AbstractClass<Type extends A> {...}
và một số lớp trẻ như
public class ChildClassA extends AbstractClass<GenericTypeA> {...}
public class ChildClassB extends AbstractClass<GenericTypeB> {...}
tôi đang tìm kiếm một cách thanh lịch làm thế nào tôi có thể sử dụng các loại chung của các lớp con (GenericTypeA, GenericTypeB, ...) bên trong lớp trừu tượng theo cách tổng quát.
Để giải quyết vấn đề này, tôi đang định nghĩa phương pháp
protected abstract Class<Type> getGenericTypeClass();
trong lớp trừu tượng của tôi và thực hiện phương pháp này
@Override
protected Class<GenericType> getGenericTypeClass() {
return GenericType.class;
}
trong mỗi lớp trẻ.
Có thể lấy loại chung của các lớp con trong lớp trừu tượng của tôi mà không cần triển khai phương thức trợ giúp này không?
BR,
Markus
Tôi không hiểu mã nguồn trong hàm tạo của Test thực sự làm gì, nhưng nó hoạt động. Bây giờ tôi không phải sử dụng các phương thức trợ giúp nữa. Thanks :-) – Markus
Nó sử dụng sự phản chiếu.Đầu tiên nó nhận được lớp chung (java.lang.reflect.Type) của lớp, trong trường hợp của chúng ta nó sẽ không bao giờ rỗng và chúng ta biết rằng nó là một ParameterizedType, vì vậy chúng ta bỏ nó và gọi phương thức getActualTypeArguents trả về một mảng các đối số kiểu thực tế ví dụ B, thuộc loại. – naikus
Ahhh, cảm ơn lời giải thích của bạn. – Markus