Ошибка захвата подстановочного знака JAVA с массивом общих стеков - PullRequest
0 голосов
/ 26 марта 2012
Stack<?>[] stacks = {
    new Stack<Bed>(),
    new Stack<Bookshelves>(),
    new Stack<Chair>(),
    new Stack<Desk>(),
    new Stack<Table>()
};

Это код, создающий массив стеков. Причина, по которой я помещаю их в массив, заключается в том, что это одно из требований для Назначения. Программа работает без массива.

Кроме того, в стеке используются дженерики, потому что мне нужно было создать свой собственный стек (что также является требованием назначения).

while(sc.hasNext()){
    temp = sc.nextLine().split(" ");
    if(temp[0].equals("Bed")){
        //beds.push(new Bed(temp[1], temp[2]));
        stacks[0].push(new Bed(temp[1], temp[2]));
    }else if(temp[0].equals("Table")){
        //tables.push(new Table(Integer.parseInt(temp[1]), Integer.parseInt(temp[2]), Integer.parseInt(temp[3]), temp[4]));
        stacks[4].push(new Table(Integer.parseInt(temp[1]), Integer.parseInt(temp[2]), Integer.parseInt(temp[3]), temp[4]));
    }else if(temp[0].equals("Desk")){
        //desks.push(new Desk(temp[1],temp[2], Integer.parseInt(temp[3]), Integer.parseInt(temp[4])));
        stacks[3].push(new Desk(temp[1],temp[2], Integer.parseInt(temp[3]), Integer.parseInt(temp[4])));
    }else if(temp[0].equals("Chair")){
        //chairs.push(new Chair(temp[1], temp[2]));
        stacks[2].push(new Chair(temp[1], temp[2]));
    }else if(temp[0].equals("Bookshelves")){
        //bookshelves.push(new Bookshelves(Integer.parseInt(temp[1]), Integer.parseInt(temp[2]), Integer.parseInt(temp[3]), Integer.parseInt(temp[4]), temp[5]));
        stacks[1].push(new Bookshelves(Integer.parseInt(temp[1]), Integer.parseInt(temp[2]), Integer.parseInt(temp[3]), Integer.parseInt(temp[4]), temp[5]));
    }else{
        color = temp[0];
    }
}

Этот код получает информацию из текстового файла и помещает объекты в стек.

Я получаю сообщение об ошибке:

push(capture#627 of ?) in Stack<capture#627 of ?> cannot be applied to (Bed)

Эта ошибка повторяется для всех созданных мной классов.

Закомментированные части - это код, который работал до того, как я сделал один стек для каждого объекта.

Я не могу поместить все в массив после того, как я поместил все в стек, потому что за ненужные промежуточные переменные будут вычтены очки.

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Единственный способ сделать это правильно и безопасно набирать текст - это либо

а) объединить все это в один Stack<Furniture> (при условии, что все классы расширяются Furniture)

b) сохранить отдельные переменные для каждого стека и полностью избавиться от массива.

1 голос
/ 27 марта 2012

Попробуйте это?

((Stack<Bed>)stacks[0]).push(new Bed(temp[1], temp[2]));
...