Image

Imagetrulala wrote in Imageru_java

Category:

Java 1.4 — приведение типа массива


Есть некий стек-аккумулятор, который принимает объекты и отдаёт их массивом:



interface Stack { 
    void push(Object o); 
 
    Object[] pop(int limit); 
}



Я храню в Stack-е объекты класса FooItem.


С помещением объектов в хранилище проблем нет. Но с выемкой возникают вопросы. Если бы Stack возвращал объекты по одному, то их можно было бы просто кастовать. Но массив приходится копировать:




class FooStore { 
    Stack stack;

    void push(FooItem item) { 
        stack.push(item); 
    } 
 
    FooItem[] pop(int limit) { 
        Object[] raw = stack.pop(limit); 
        FooItem[] result = new FooItem[raw.length]; 
        System.arraycopy(raw, 0, result, 0, raw.length); 
        return result; 
    } 
}



Мне эта затея с копированием кажется неправильной. Есть ли более красивый путь изменения типа компонентов массива? Или лучше вообще не заморачиваться и отдавать Object[], а в комментарии сказать, что он хранит FooItem-ы? Или, может быть, я вообще хочу неправильного? Не соображу, как об этом погуглить.