web-dev-qa-db-fra.com

Comment passer un objet générique comme paramètre générique à une autre méthode en java?

Je rencontre un problème en utilisant la méthode générique

Classe compilée:

public class Something<T> {
   public static Something newInstance(Class<T> type){};
   public <T> void doSomething(T input){};
}

et ma méthode est:

public <S> void doOtherThing(S input){
      Something smt = Something.newInstance(input.getClass());
      smt.doSomething(input); // Error here
}

Il y a eu une erreur lors de la compilation: 

aucune méthode appropriée trouvée pour doSomething (T) T ne peut être convertie en capture n ° 1 de? étend Java.lang.Object ...

Je pense qu'il pourrait y avoir un truc pour éviter ça, aidez s'il vous plaît

8
lethanh

Je pense que input.getClass() doit être converti en Class<T>

public <S> void doOtherThing(S input){
      Something smt = Something.newInstance((Class<T>)input.getClass());
      smt.doSomething(input);
}
0
ChenHuang

Passez la classe S en argument.

public class Something<T>
{
    public static <T> Something<T> newInstance(Class<T> type)
    {
        return new Something<T>();
    }

    public void doSomething(T input){;}

    public <S> void doOtherThing(Class<S> clazz, S input)
    {
        Something<S> smt = Something.newInstance(clazz);
        smt.doSomething(input);
    }
}
7
Bastien

Quelque chose comme ça? (chose générique de déclaration de type sur notre méthode newInstance)

public class Something<T> {
   public static <T> Something<T> newInstance(Class<T> type){ return null; }
   public <T> void doSomething(T input){};
}
0
Ivan