Tôi đã cố gắng tìm hiểu xem liệu có thể tạo ra một phương thức đưa vào một kiểu generic dựa trên lớp trả về và gọi một phương thức tĩnh của kiểu generic đó không.Java - Phương pháp tĩnh chung
tức là dưới đây tôi tạo 2 lớp, cả hai đều triển khai phương thức getInstances và getAllInstances. Sau đó tôi cố gắng tạo ra sử dụng các phương thức từ một trình bao bọc chung chung. Dường như phương thức siêu hạng luôn được chạy bất kể kiểu trả về.
Ví dụ,
public class ParentClass {
public ParentClass(){}
public static <T extends ParentClass> T getInstance(){
return (T) new ParentClass();
}
public static <T extends ParentClass> List<T> getAllInstances(){
ArrayList<ParentClass> parents = new ArrayList<ParentClass>();
for(int i=0;i<5;i++){
parents.add(new ParentClass());
}
return (List<T>) parents;
}
}
SubclassA
public class SubclassA extends ParentClass{
public SubclassA(){}
@SuppressWarnings("unchecked")
public static SubclassA getInstance(){
return new SubclassA();
}
@SuppressWarnings("unchecked")
public static List<SubclassA> getAllInstances(){
ArrayList<SubclassA> parents = new ArrayList<SubclassA>();
for(int i=0;i<5;i++){
parents.add(new SubclassA());
}
return parents;
}
}
Wrapper - Hiển thị vấn đề
public class Wrapper {
public Wrapper(){
// ... some other stuff
}
public <T extends ParentClass> T getInstance(){
return T.getInstance();
}
public <T extends ParentClass> List<T> getAllInstances(){
return T.getAllInstances();
}
public static void main(String... args){
Wrapper wrapper = new Wrapper();
SubclassA subclassA = wrapper.getInstance();
ParentClass parentClass = wrapper.getInstance();
System.out.println(subclassA.getClass().getName());
System.out.println(parentClass.getClass().getName());
}
}
Khi chạy Wrapper tôi nhận được lỗi sau:
Ex lừa dối trong chủ đề "chính" java.lang.ClassCastException: ParentClass không thể được đưa vào SubclassA tại Wrapper.main (Wrapper.java:20)
Tôi có thể làm điều này trong Java không?
không hiểu những gì bạn mong đợi ở đây .... bạn đang gọi một phương thức tĩnh trên một lớp, nó được thực thi. tại sao nó nên ủy quyền cuộc gọi đến một lớp con? và làm thế nào để xác định cái nào? – Gab
Vâng, hy vọng là nó sẽ xác định lớp con nào được ủy quyền bằng cách suy ra từ kiểu trả về. Bây giờ tôi hiểu rằng bạn không thể ghi đè lên các phương pháp tĩnh có ý nghĩa. – user2294382