I see interfaces with default implementation as a anti-pattern, actually. I don't use it. Also, IMHO mixins are good for utility code, other than that it might smell.
Maybe vala should have a literal mixin, with only virtual methods and not instantiable nor castable. Only useful to add utility methods into classes. On Sun, Feb 28, 2016 at 22:50 Daniel Espinosa <eso...@gmail.com> wrote: > If you want your interface to provide, not just default implementations, > but methods your classes should not need to implement they self, use > virtual methods, you can provide an implementation for this method your > derived classes don't need to implement but inherited. Static methods can > be used to be reused if you want. > El feb. 28, 2016 4:31 PM, "Felipe Lavratti" <felipe...@gmail.com> > escribió: > >> 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 <felipe...@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 >> > _______________________________________________ vala-list mailing list vala-list@gnome.org https://mail.gnome.org/mailman/listinfo/vala-list