2012-03-26 7 views
0
Stack<?>[] stacks = { 
    new Stack<Bed>(), 
    new Stack<Bookshelves>(), 
    new Stack<Chair>(), 
    new Stack<Desk>(), 
    new Stack<Table>() 
}; 

Das ist der Code, der das Array von Stapeln macht. Der Grund, warum ich sie in ein Array setze, ist, dass es eine der Voraussetzungen für die Zuweisung ist. Das Programm funktioniert ohne das Array.JAVA-Wildcard-Capture-Fehler mit einem Array von generischen Stacks

Auch der Stack übernimmt Generics, weil ich meinen eigenen Stack erstellen musste (auch eine Voraussetzung für die Zuweisung).

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]; 
    } 
} 

Dieser Code ruft die Informationen aus der Textdatei ab und verschiebt die Objekte in den Stapel.

Ich erhalte eine Fehlermeldung,:

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

Dieser Fehler wiederholt sich für alle Klassen, die ich geschaffen habe.

Die Teile, die auskommentiert sind, ist der Code, der vorher arbeitete, als ich einen einzelnen Stapel für jedes Objekt machte.

Ich kann nicht alles in das Array setzen, nachdem ich alles in den Stack geschoben habe, da Punkte für unnötige Zwischenvariablen herausgenommen werden.

Antwort

2

Der einzige Weg, dies zu tun richtig und typ sicher ist entweder

a) kombinieren dies alles in einem Stack<Furniture> (vorausgesetzt, alle Klassen Furniture)

b) getrennte Variablen für jeden Stapel halten verlängern, und das Array vollständig loswerden.

+0

Versucht, dass, hat nicht funktioniert. Die Option 'b' ist für die Zuweisung nicht zulässig. – prunes4u

+0

Ich meinte es ernst, als ich sagte, dass dies die einzigen Methoden waren, dies richtig zu machen oder typsicher zu machen. Die Alternative ist, die Typsicherheit zu verlieren und mit unsicheren Rohcasts zu beginnen: '(Stack) stacks [0] .push' nimmt jedes' Object'. Ewwwwwwwww. –

+2

Ja, ich bin mir nicht sicher, warum eine Aufgabe das erfordern würde. Es scheint, als würde es schlechtes Design lehren. –

1

Versuchen Sie das?

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