Beste Tweakers,
Ik heb een probleem met generics, abstracte klasses en het extenden daarvan.
Dit werkt namelijk niet
Ik kan de methode blaat dus niet aanroepen met een stack van Bars, terwijl Bar een subklasse van AbstractFoo is. Ik krijg dan een error dat 'ie de boel niet kan converten.
Als ik in de methode-declaratie Object s zet in plaats van Stack<AbstractFoo> s, dan werkt het wel. Het maakt trouwens niet uit of Foo een abstracte klasse is. Ook als ik er een normale klasse van maak, werkt het niet.
Het uiteindelijke doel is trouwens als volgt: Ik wil een methode hebben om een stack te vullen met een vastgesteld aantal elementen van een bepaald type. Per keer kan het type van de elementen verschillen, maar ze hebben wel allemaal dezelfde parent klasse. Daarom had ik een member gemaakt in de vorm van Stack<AbstractFoo> en die wilde ik dus vullen met elementen met als type een (per keer verschillende) subklasse van AbstractFoo.
Ik heb een probleem met generics, abstracte klasses en het extenden daarvan.
Dit werkt namelijk niet
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| // Standaardzooi, nog geen fout hier abstract class AbstractFoo { protected int x; } class Bar : AbstractFoo { public Bar() { x = 3; } } // Nu komt het, dit werkt niet public void blaat(Stack<AbstractFoo> s) { } Stack<Bar> barstack = new Stack<Bar>(); blaat(barstack); |
Ik kan de methode blaat dus niet aanroepen met een stack van Bars, terwijl Bar een subklasse van AbstractFoo is. Ik krijg dan een error dat 'ie de boel niet kan converten.
Als ik in de methode-declaratie Object s zet in plaats van Stack<AbstractFoo> s, dan werkt het wel. Het maakt trouwens niet uit of Foo een abstracte klasse is. Ook als ik er een normale klasse van maak, werkt het niet.
Het uiteindelijke doel is trouwens als volgt: Ik wil een methode hebben om een stack te vullen met een vastgesteld aantal elementen van een bepaald type. Per keer kan het type van de elementen verschillen, maar ze hebben wel allemaal dezelfde parent klasse. Daarom had ik een member gemaakt in de vorm van Stack<AbstractFoo> en die wilde ik dus vullen met elementen met als type een (per keer verschillende) subklasse van AbstractFoo.