Új hozzászólás Aktív témák

  • Gyuri16

    senior tag

    segitseget szeretnek kerni reflectionnel. suliba irok egy projektet, ami kulonbozo algoritmusokat hasonlit ossze (gyakorlatilag a futasi idejuket meri).
    az objektumstruktura ilyen:
    AbstractHeap<E>
    |
    BinaryHeap<E>
    na most ha kontkretan van egy ilyenunk:
    BinaryHeap<Integer>, akkor annak van egy olyan fuggvenye hogy Insert(Integer e)
    namarmost en szeretnek egy tesztelo objektumot, aminek lesz egy referenciaja a heap-re, es megmondom neki melyik metodust (pl Insert) milyen paramerekkel hivja meg, o lefuttatja, es megmondja meddig tartott neki. itt egy kod, hogy mit probaltam eddig:

    public long Test(String name, Object[] args) {
    long t1 = 0, t2 = -1;
    Class<?>[] c = new Class[args.length];
    for (int i = 0; i < args.length; i++)
    c[i] = args[i].getClass();
    t1 = System.nanoTime();
    heap.getClass().getMethod(name, c).invoke(heap, args);
    t2 = System.nanoTime();
    return t2-t1;
    }

    itt termeszetesen a heap egy private referencia. hasznalva igy lenne kb:

    HeapTester<Integer> tester = new HeapTester<Integer>(new BinaryHeap<Integer>());
    long ido = tester.Test("Insert", new Integer[] {4});

    namarmost itt az a problema (szerintem), hogy a heap.getClass() csak azt tudja, hogy BinaryHeap, es a <Integer> resz elveszik, igyaztan a getMethod mar azt mondja nem talalt olyan Insertet aminek Integer parameterei vannak (java.lang.NoSuchMethodException: heap.BinaryHeap.Insert(java.lang.Integer))
    most ugy oldottam meg, hogy a HeapTester osztalyban szetirtam az osszes metodust, amit tesztelni akarok, es csak meghivom azt a fuggvenyt a referencian keresztul, es visszaadom meddig tart, de ez igy nagyon nem szep, illetve eleg komplikalt lenne igy komplikaltabb teszteket (mondjuk 2-3 fajta implementacion hajts vegre sok insertet, deletet stb. es mindegyiknel jegyezd meg az idoket). a kerdes az, hogyan lehetne ezt megcsinalni, hogy mukodjon ahogy en gondoltam?
    koszi a segitseget elore is
    sorry, kicsit hosszu lett, remelem azert ertheto a gond

Új hozzászólás Aktív témák

Hirdetés