covariance entre génériques
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:
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:
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:
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> |