Bonjour,
Je ne comprends pas pourquoi le compilateur Java n'assure pas la conversion suivante.
En déclarant format() avec <K,V> (ligne commentée), je comprends que l'information générique sur K et V ne soit pas disponible dans TextOutputFormat.class.
Par contre, avec la déclaration Class<? extends InputFormat<?,?>> (ligne non commentée), tout se passe comme si TextOutputFormat et TextOutputFormat<?,?> n'étaient pas covariants.
Pourriez-vous m'expliquer ?
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 A<Text,NullWritable> a = ...; a.format(TextOutputFormat.class); // PROBLEME : method is not applicable a.format((Class<? extends InputFormat<Text,NullWritable>>) TextOutputFormat.class); // ok
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Interface A<K,V> { /** A setter for attribute format */ // public void format(Class<? extends InputFormat<K,V>> format); public void format(Class<? extends InputFormat<?,?>> format); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 java.lang.Object extended by org.apache.hadoop.mapreduce.OutputFormat<K,V> extended by org.apache.hadoop.mapreduce.lib.output.FileOutputFormat<K,V> extended by org.apache.hadoop.mapreduce.lib.output.TextOutputFormat<K,V>
Partager