Java Language Obtenir une classe qui vérifie le paramètre générique à l'exécution


Exemple

De nombreux paramètres génériques non liés, tels que ceux utilisés dans une méthode statique, ne peuvent pas être récupérés à l'exécution (voir Autres threads sur l' effacement ). Cependant, une stratégie commune est utilisée pour accéder au type satisfaisant un paramètre générique sur une classe à l'exécution. Cela permet un code générique qui dépend de l'accès au type sans avoir à envoyer des informations de type à chaque appel.

Contexte

Le paramétrage générique sur une classe peut être inspecté en créant une classe interne anonyme. Cette classe capturera les informations de type. En général, ce mécanisme est désigné sous le nom de jeton de type super , qui est détaillé dans l' article du blog de Neal Gafter .

Les implémentations

Trois implémentations courantes en Java sont:

Exemple d'utilisation

public class DataService<MODEL_TYPE> {
     private final DataDao dataDao = new DataDao();
     private final Class<MODEL_TYPE> type = (Class<MODEL_TYPE>) new TypeToken<MODEL_TYPE>
                                                                (getClass()){}.getRawType();
     public List<MODEL_TYPE> getAll() {
         return dataDao.getAllOfType(type);
    }
}

// the subclass definitively binds the parameterization to User
// for all instances of this class, so that information can be 
// recovered at runtime
public class UserService extends DataService<User> {}

public class Main {
    public static void main(String[] args) {
          UserService service = new UserService();
          List<User> users = service.getAll();
    }
}