J'ai l'interface suivante.Comment générique générique comme paramètre
interface ITest<T extends Object>{
List<T> getValues();
Object getValueForKey(String key, T dataObject);
}
donc je veux l'utiliser dans une méthode statique comme:
static createTable(ITest<?> test){
for(? dataObject: test.getValues()){
Object value = test.getValueForKey("KEY", dataObject)
}
}
Ce qui amène l'erreur: « Les caractères génériques peuvent être utilisés que comme paramètres de référence »
et bien sûr c'est ne pas accepter un objet dans "getValueForKey()"
Quand j'utiliser cela comme:
ITest<Option> testImpl = new ITest<Option>(){
@Override
List<Option> getValues(){
new ArrayList<>(10);
}
...
}
createTable(testImpl);
Comment puis-je obtenir de rester précis dans mon implémentation d'interface spécifique, mais pas dans la méthode statique à l'aide de l'interface (le meilleur des cas: sans avertissement préalable de l'analyse syntaxique décochée/cast)
Je ne comprends pas la question. Le ? wildcard signifie "je ne me soucie pas du type". En d'autres termes: "Je connais nada zip niente sur le type". Je ne comprends pas pourquoi vous voulez "aligner" cette non-connaissance avec "J'ai un type T spécifique connu". – GhostCat
Qu'attendez-vous? dataObject' à faire? – Oleg
Il est assez simple que la méthode statique soit utilisée avec beaucoup de types différents, et que je ne veuille pas l'implémenter à chaque fois car c'est beaucoup de code qui serait redondant –