В Java (Android) У меня был некоторый код, который выглядит следующим образом:Sneaky Java отливать
for (Tuple tuple : xRange) {
Tuple5<Integer, Integer, Double, Double, Double> t = (Tuple5<Integer, Integer, Double, Double, Double>)tuple;
...
}
Что может быть боль, чтобы написать. Кстати, Tuple5 происходит от Tuple.
Так что я написал этот метод:
@SuppressWarnings("unchecked")
public static final <U1, U2 extends U1> U2 cast(U1 inst) {
return (U2)inst;
}
Выглядит противный, да? Но это тогда позволило мне переписать код так:
for (Tuple tuple : xRange) {
Tuple5<Integer, Integer, Double, Double, Double> t = cast(tuple);
...
}
Я компиляции на Android с помощью AIDE компилятора. Я думаю, что он даже не может компилироваться в других системах.
Мой вопрос заключается в том, что это работает на всех компиляторах? Это плохой код? И если это так, то почему?
Благодаря
Как объявляется 'xRange'? – jlordo
Вы думаете, что он не будет компилироваться в других системах или не компилируется в других системах? Это два очень разных наблюдения. – Jeffrey
В большинстве случаев это плохо imho. Однако не хуже первого фрагмента. Тем не менее, я бы рекомендовал вам проверить, действительно ли кастинг может быть успешным до кастинга, поэтому вы можете пропустить неподдерживаемые записи коллекции (в отличие от сбоев вашей программы в непередаваемых записях). – dst