Общий аргумент стека должен быть общим супертипом всех типов времени выполнения элемента. Для полностью разнородных коллекций Object
является общим супертипом всех ссылочных типов. Итак:
Queue<Object> stack = Collections.asLifoQueue(new ArrayDeque<Object>());
stack.add("red");
stack.add(Color.GREEN);
stack.add(stack);
Очевидно, что когда вы приходите извлекать эти элементы из стека, вам нужно будет сделать instanceof
проверку, чтобы направить к соответствующему коду (и, вероятно, приведению).
Наверное, лучше было бы ввести слой косвенности. Вместо непосредственного помещения объектов в очередь, оберните их в значимый объект. Все проверки instanceof
можно заменить вызовами (виртуальных) методов, которые выполняют необходимые операции. Вот как должен быть полиморфизм.