16. september 2005 - 12:54Der er
3 kommentarer og 1 løsning
Få en Class ud fra en generisk type
Jeg har en metode som starter som følger: public <T> void delete(T deleteObject){
Herefter skal jeg bruge en Class til at kalde lave klassen public class Query<T> implements QueryInterface<T> { med constructor public Query(Class<T> searchFor){
Her er så problemet. Hvis jeg kalder deleteObject.getClass() får jeg en Class<? extends Object>, og det påstår min compiler, at constructoren ikke duer til. Med andre ord, får jeg fejlen "The constructor Query<T>(Class<? extends Object>) is undefined"
Er der nogen der kan fortælle mig, hvordan jeg får en klasse som kan bruges til denne constructor, uden at skulle sende den med som argument til min delete-metode?
Selvfølgelig. Her kommer noget kode. Problemet kommer ifølgende metode i linien Query<T> query = new Query<T>(c); hvor warningen kommer på c.
public <T> void delete(T deleteObject) throws ... { Vector<T> v = new Vector<T>(); v.add(deleteObject); AnalysisInterface ai = new Analysis(); Vector<ObjectDescriptor> objects = ai.analyse(v); int oid = objects.get(0).getOid(); Class c = deleteObject.getClass(); Query<T> query = new Query<T>(c); try { query.addCriteria("oid", Query.EQUAL, Integer.toString(oid)); } catch (IllegalQueryException e) { Log.getInstance().write(e+" made by the delete()"); e.printStackTrace(); } delete(query); }
Og det vil nok også hjælpe at få lidt kode fra query-klassen: public class Query<T> implements QueryInterface<T> { public Query(Class<T> searchFor){ this.searchFor = searchFor; criterias = new Vector<SearchCriteria>(); orderBy = new Vector<SearchCriteria>(); uniOp = new Vector<SearchCriteria>(); } ... }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.