Re: [Vala] Is there any way to access generic type from the interface?
- From: Felipe Lavratti <felipelav gmail com>
- To: "marcin saepia net" <marcin saepia net>
- Cc: Vala-list <vala-list gnome org>
- Subject: Re: [Vala] Is there any way to access generic type from the interface?
- Date: Sun, 28 Feb 2016 19:30:39 -0300
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]