Mam trudności z zawijaniem głowy wokół typów ogólnych Javy. Oto prosty fragment kodu, który w mojej głowie powinien zadziałać, ale oczywiście robię coś nie tak.Konstruktor Java używający generycznych typów
Eclipse zgłasza ten błąd w BreweryList.java:
The method breweryMethod() is undefined for the type <T>
Chodzi o to, aby wypełnić Vector z wystąpień obiektów, które są podklasą klasy browar, więc wywołanie byłoby coś jak:
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() {
}
}
Jestem pewien, że jest to kwestia Complete-rodzajowych-noobem, ale utknąłem. Dzięki za wszelkie wskazówki!
Zdecydowanie zalecamy użycie własnego 'BreweryFactory' zamiast nadużywania' Klasy'. Jeśli możesz rozsądnie uniknąć refleksji, zrób to. –
http://stackoverflow.com/ jest znacznie lepszy do programowania powiązanych pytań. –
Widziałem to pytanie kilka godzin temu. – Roman