Hirdetés

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

  • Lortech
    addikt

    Vagy nagyon pentek van, vagy mindenki masnak trivialis hogy ilyen nincs... es meg hetfon is jo lesz csak felre akarom tenni a problemat es a tobbi reszt csinalni.
    Tehat ha van ket osztalyom, Imp1Class es Imp2Class, akik azonos interface-t akarnak megvalositani, amiben van hogy "onmaguk" tipusa kell legyen a parameter, mondjuk van benne egy addMtx(... other) fuggveny. Ilyenkor van-e arra megoldas, hogy az other tipusa az az osztaly legyen amelyik eppen megvalosit? Mert ha az interface-t magat irom tipusnak, akkor nem lehetek biztos benne, hogy ugyanazt kapom (holott az a terv, hogy mindenkit csak sajat tipusaval szabadna osszeereszteni).
    Igen, lehet ellenorizni instanceof-fal es akkor meghivni csak a sajatot amugy exception. De ez igy onmagaban nem egy megoldhato dolog? Vegulis nem szukseges, foleg hogy egyutt vszinu csak bemutatozni kene, de most mar idegesit, hogy ennyire hianyos a tudasom vagy megint tul sokat gondolok termeszetesnek.

    Röviden: tényleg nincs.

    Csinálhatsz generikus interface-t:

    public interface IF1<T extends IF1> {
    void add(IF1<T> other);
    }

    public class Imp1 implements IF1<Imp1> {
    @Override
    public void add(IF1<Imp1> Other) {
    }
    }

    public class Imp2 implements IF1<Imp2> {

    @Override
    public void add(IF1<Imp2> other) {
    }
    }

    {
    IF1 impraw = new Imp2();
    IF1<Imp1> impl1 = new Imp1();
    IF1<Imp2> impl2 = new Imp2();
    impraw.add(impraw);
    impraw.add(impl1);
    impraw.add(impl2);
    impl1.add(impl1);
    impl1.add(impraw);

    impl2.add(impl2);
    impl2.add(impraw);

    pass(impraw, impl1);
    pass(impl1, impraw);

    pass2(impl2, impl1);
    }

    private static void pass(IF1<Imp1> one, IF1 other) {
    one.add(other);
    other.add(one);
    }

    private static void pass2(IF1 one, IF1 other) {
    one.add(other);
    other.add(one);
    }

    De ez jobbára csak bohóckodás, mert ha használni akarod, úgyis meg kell adnod a típus paramétert fordítás időben, hogy garantáltan *csak saját magával tudd átadni neki, vagy típus paraméter nélkül hagyod és unchecked leszel. Valamint raw IF1 (impraw-t) IF1 példányt oda vissza tudod passzolgatni futási és fordítási hiba nélkül.

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