Avatar billede martinhrj Nybegynder
16. september 2005 - 12:54 Der 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?

På forhånd tak!
Avatar billede martinhrj Nybegynder
16. september 2005 - 16:02 #1
Ok. Indtil videre har jeg bare accepteret en type warning. Men jeg er ikke glad for det ;)

Jeg lader lige spørgsmålet stå, hvis nogen skulle have en idé...
Avatar billede arne_v Ekspert
16. september 2005 - 21:42 #2
kunne du poste et komplet kode eksempel ?

det er svært at gennemskue hvad problemet er udfra beskrivelsen
Avatar billede martinhrj Nybegynder
17. september 2005 - 13:44 #3
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>();
    }
...
}
Avatar billede martinhrj Nybegynder
28. november 2005 - 09:54 #4
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester