j'avais un code en Java (Android) qui ressemblait à ceci:Sneaky Java jeté
for (Tuple tuple : xRange) {
Tuple5<Integer, Integer, Double, Double, Double> t = (Tuple5<Integer, Integer, Double, Double, Double>)tuple;
...
}
Ce qui peut être une douleur à écrire. Au fait, Tuple5 dérive de Tuple.
J'ai donc écrit cette méthode:
@SuppressWarnings("unchecked")
public static final <U1, U2 extends U1> U2 cast(U1 inst) {
return (U2)inst;
}
Attend méchant, hein? Mais cela m'a alors permis de réécrire le code comme ceci:
for (Tuple tuple : xRange) {
Tuple5<Integer, Integer, Double, Double, Double> t = cast(tuple);
...
}
Je compile sur Android en utilisant le compilateur AIDE. Je pense qu'il ne peut même pas compiler sur d'autres systèmes.
Ma question est de savoir si cela fonctionne sur tous les compilateurs? Est-ce mauvais code? Et, si c'est le cas, alors pourquoi?
Merci
Comment 'xRange' est-il déclaré? – jlordo
Pensez-vous qu'il ne sera pas compilé sur d'autres systèmes, ou ne compile-t-il pas sur d'autres systèmes? Ce sont deux observations très différentes. – Jeffrey
Dans la plupart des cas, c'est mauvais imho. Pas pire que le premier extrait, cependant. Cependant, je vous recommande de vérifier si le casting peut effectivement réussir avant de lancer, de sorte que vous pouvez passer par-dessus les entrées de collection non supportées (par rapport aux erreurs de votre programme sur les entrées non diffusables). – dst