Hirdetés

Keresés

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

  • Aethelstone
    addikt

    Sziasztok,

    újabb feladathoz értem, ahol elakadtam.

    Az alábbi Comapre osztályban minden max metódus azonos, kivéve a típusok neveit. LEhetséges lenne egyetlen max metódussal valamennyit helyettesíteni? Ha igen, akkor melyik megoldást használná?

    public class Compare {

    public byte max(final byte a, final byte b) {
    return a > b ? a : b;
    }

    public short max(final short a, final short b) {
    return a > b ? a : b;
    }

    public int max(final int a, final int b) {
    return a > b ? a : b;
    }

    public long max(final long a, final long b) {
    return a > b ? a : b;
    }

    public float max(final float a, final float b) {
    return a > b ? a : b;
    }

    public double max(final double a, final double b) {
    return a > b ? a : b;
    }

    public char max(final char a, final char b) {
    return a > b ? a : b;
    }
    }

    Mire gondolhat, ha a könyvben még nem taglalta a generalizáció fogalmát, a generikus függvényeket? Egyelőre amik voltak: Procedurális nyelvi elemek, OO nyelvi elemek (osztályok, öröklés, beágyazott osztályok).

    Vagy ilyet is lehet, ha már a generikusokra rákérdeztél. Ez viszont működik explicit típusokkal is.

    (Természetesen a korábban vázolt megoldások tejesen jók)

    public class GenericTest<T extends Comparable<T>> {

    public T max(T a, T b) {
    return (a.compareTo(b) > 0 ? a : b);
    }

    public static void main(String[] args) {
    GenericTest<Double> gt1 = new GenericTest<Double>();
    System.out.println(gt1.max(10d, 12d));
    GenericTest<Integer> gt2 = new GenericTest<Integer>();
    System.out.println(gt2.max(12, 23));

    // És így tovább....
    }

    }

    Ennek a megoldásnak az az előnye, hogy tulajdonképpen mindenféle típusra lehet max() metódust írni. Kivéve természetesen a primitív típusokat, azokat a generikusok nem támogatják :(

  • WonderCSabo
    félisten

    Sziasztok,

    újabb feladathoz értem, ahol elakadtam.

    Az alábbi Comapre osztályban minden max metódus azonos, kivéve a típusok neveit. LEhetséges lenne egyetlen max metódussal valamennyit helyettesíteni? Ha igen, akkor melyik megoldást használná?

    public class Compare {

    public byte max(final byte a, final byte b) {
    return a > b ? a : b;
    }

    public short max(final short a, final short b) {
    return a > b ? a : b;
    }

    public int max(final int a, final int b) {
    return a > b ? a : b;
    }

    public long max(final long a, final long b) {
    return a > b ? a : b;
    }

    public float max(final float a, final float b) {
    return a > b ? a : b;
    }

    public double max(final double a, final double b) {
    return a > b ? a : b;
    }

    public char max(final char a, final char b) {
    return a > b ? a : b;
    }
    }

    Mire gondolhat, ha a könyvben még nem taglalta a generalizáció fogalmát, a generikus függvényeket? Egyelőre amik voltak: Procedurális nyelvi elemek, OO nyelvi elemek (osztályok, öröklés, beágyazott osztályok).

    Nem, itt nem erre gondol szerintem. Itt az a lényeg, hogy elég lenne a double-vel megírni a metódust, mivel a többi típus mind szűkebb tartományt ábrázol, implicit, bővítő típuskonverzióval működni fog ha int-et, short-ot stb. adsz át neki.

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