Java constructor using generic types
java
Solution
item.breweryMethod();
instead of
c.breweryMethod();
You were attempting to call the method on the `Class<T>`, not on the instance.
And actually, Eclipse reports
The method breweryMethod() is undefined for the type Class<T>
and it should be clear from this message what has happened.
(And after you fix that, you will also have to handle the exceptions declared by `Class.newInstance()`)
As Tom Hawtin suggested in a comment, you'd better use a factory method instead of using reflection in your method, in order to create your object.
Problem
I'm having a hard time wrapping my head around Java generic types. Here's a simple piece of code that in my mind should work, but I'm obviously doing something wrong. Eclipse reports this error in BreweryList.java: ``` The method breweryMethod() is undefined for the type <T> ``` The idea is to fill a Vector with instances of objects that are a subclass of the Brewery class, so the invocation would be something like: ``` BreweryList breweryList = new BreweryList(BrewerySubClass.class, list); ``` BreweryList.java ``` package com.beerme.test; import java.util.Vector; public class BreweryList<T extends Brewery> extends Vector<T> { public BreweryList(Class<T> c, Object[] j) { super(); for (int i = 0; i < j.length; i++) { T item = c.newInstance(); // breweryMethod() is an instance method // of Brewery, of which <T> is a subclass (right?) c.breweryMethod(); // "The method breweryMethod() is undefined // for the type <T>" } } } ``` Brewery.java ``` package com.beerme.test; public class Brewery { public Brewery() { super(); } protected void breweryMethod() { } } ``` BrewerySubClass.java ``` package com.beerme.test; public class BrewerySubClass extends Brewery { public BrewerySubClass() { super(); } public void brewerySubClassMethod() { } } ``` I'm sure this is a complete-generics-noob question, but I'm stuck. Thanks for any tips!