Java: приведение типа при работе с массивом?

sergey_m

Есть такой код:

for (Object o : FuncThatReturnsArrayOfObject {
MyType t = (MyType )o;

............
}

Возможно ли его упростить так, чтобы не прибегать к Object o?
Например компилится и не работает:

for (MyType t : (MyType [])FuncThatReturnsArrayOfObject {
............
}

Dasar

а так компилится?
for (MyType t : FuncThatReturnsArrayOfObject {

danilov

Если у тебя массив Object[], содержащий только MyType, то ничего не сделаешь - проблема в архитектуре.

danilov

А, не, сделаешь. Можешь обернуть Arrays.asList и скаcтить к List<MyType>, но это грязный хак

kill-still

так не скастится
    Collection<Object> o = ...;
    Collection<MyType> m = (Collection<MyType>) o;

danilov

Collection<Object> o = ...;
Collection<MyType> m = (Collection<MyType>) (Collection) o;

sergey_m

for (MyType t : FuncThatReturnsArrayOfObject {
Так не компилится.

sergey_m

Можешь обернуть Arrays.asList и скаcтить к List<MyType>, но это грязный хак
Ха, думал об этом. Но уж лучше прибегуть к Object o :)

danilov

Оба хуже. Надо менять тип возвращаемого значения функции.

schipuchka1

ага, вот на какой-нить такой :smirk:
public <X> X dirtyGet(Object o) {
assert model != null : MODEL_IN_PROXY_IS_NULL_STRING;
assert property != null : PROPERTIES_IS_NULL_STRING;
return (X) model.get(o);
}
(ирония мод)

sergey_m

Функция библиотечная.

anton7805

по нормальному никак -
это наследие java до версии 1.5 , пока не появились дженерики

danilov

Дженерики-то тут причём? Что, до 1.5 массивы были только Object[]?

anton7805

Если тип элементов массива не мог быть однозначно задан, то обычно возвращался Object[].
С дженериками стало возможно указывать тип элемента (например в коллекции) и одной функцией toArray(T[] elem) вернуть массив без каста каждого элемента
Оставить комментарий
Имя или ник:
Комментарий: