Ho cercato di capire se è possibile creare un metodo che inferisca un tipo generico basato sulla classe return e che invochi un metodo statico di quel tipo generico.Java - Metodi statici generici
Ad esempio, qui sotto creo 2 classi che implementano entrambi i metodi getInstances e getAllInstances. Quindi tento di creare i metodi da un wrapper generico. Sembra che il metodo di super classe venga sempre eseguito indipendentemente dal tipo di ritorno.
Per esempio,
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 - mostra il problema
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());
}
}
Quando si esegue Wrapper ricevo il seguente errore:
Ex ception in thread "main" java.lang.ClassCastException: ParentClass non può essere trasmesso a SubclassA su Wrapper.main (Wrapper.java:20)
Posso farlo in Java?
non capisco cosa ti aspetti qui .... stai chiamando un metodo statico su una classe, è eseguito. perché dovrebbe delegare la chiamata a una sottoclasse? e come determinare quale? – Gab
Beh, la speranza era che avrebbe determinato la sottoclasse a cui delegare inferendo dal tipo di ritorno. Ora capisco che non è possibile sovrascrivere i metodi statici che ha senso. – user2294382