Re: [Vala] Is there any way to access generic type from the interface?



Even better, try this main instead the previous:

int main () {

    IMixinInterface fooer = new NothingSpecialFooer();
    fooer.foo();

    fooer = new TheSpecialFooer();
    fooer.foo();

    return 0;
}

Here we use the interface as the type of the object to show
polymorphism with mixin happening.

It prints:

$ ./test
** Message: test.vala:5: fooed defaulty!
** Message: test.vala:13: dummy string
** Message: test.vala:22: fooed specially!



On Sun, Feb 28, 2016 at 7:24 PM, Felipe Lavratti <felipelav gmail com> wrote:
Right, I see what u are asking now.

Well, if you want to do Mixins in Vala, you'll have to do the "static"
workaround, since it doesn't support by default:
https://wiki.gnome.org/Projects/Vala/Tutorial#Mixins_and_Multiple_Inheritanae

Now you want to do Mixing with Generics? Ok, add the generic argument to
each  Mixin method of your interface:

public interface IMixinInterface : Object {
    public abstract void foo();

    public static T default_fooing<T>(T arg) {
        GLib.message("fooed defaulty!");
        return arg;
    }
}

public abstract class BaseFooer : Object, IMixinInterface {
    public virtual void foo() {
        var dummy_string = IMixinInterface.default_fooing<string>("dummy
string");
        GLib.message(dummy_string);
    }
}

public class NothingSpecialFooer : BaseFooer {
}

public class TheSpecialFooer : BaseFooer {
    public override void foo() {
        GLib.message("fooed specially!");
    }
}

int main () {

    var fooer = new NothingSpecialFooer();
    fooer.foo();

    var fooer2 = new TheSpecialFooer();
    fooer2.foo();

    return 0;
}


This example doesn't cover BaseFooer taking a generic argument, if the
example is not enough, please provide me more details about how is the
generic argument used in BaseFooer.

- Fanl





-- 
Skype: felipeanl


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]