On Tue, Sep 22, 2009 at 06:40:10 +0200, Marco Trevisan (Treviño) wrote:
> Is it possible to define both in VAPIs and in a vala code a class which
> can not be extended?
>
> I mean something like "final" does for Java and "sealed" for C#...
I don't think so. Though some classes are not inheritable because they lack
proper construction functions. That's (unfortunately) the case for most
classes in the GLib namespace.
And I think vala should *NOT* get 'sealed'. It does not need it. In fact, C#
does not need it either -- they added it because Java had 'final', but in
Java it partly replaces missing non-virtual methods. In C# it's mostly
annoying.
> I think they could be useful for grouping static methods in "virtual
> classes" (I mean in a class which name has not a reference in a C
> type/structure, but that has just been written for organizing similar
> methods) without the risk of methods overriding or of extending a
> "virtual" class that has been defined in a VAPI but that is not
> available in the relative C code.
I think you are forgetting, that vala has non-member functions. Static
methods -- functions -- should be grouped in namespaces. There are many cases
of that in glib-2.0.vapi and gobject-2.0.vapi.
> For example:
>
> public final class Utility {
> public static void my_method();
> }
That's only useful in Java which does not have non-member methods. And even
there the final keyword is useless -- it's static, so it cannot be virtual
and if you call it as Utility.my_method(), you always call that method and
nothing else. Only instance methods may be overriden.
In vala, you just use namespace as:
namespace Utility {
public void my_method();
}
Note, that in C# you can now use a namespace now too, but in earlier versions
where non-member functions were not allowed there was special 'static class'
declaration for this purpose.
> or in VAPI:
>
> public abstract final MyOwnType {
Abstract final makes no sense, because 'abstract' means it must be inherited
and final means it must not.
In Java, it's an idiom for a static class. In C# it would be declared 'static
class' and in all languages that support non-member methods, including vala,
a namespace would be used instead.
And you forgot 'class' or 'struct'.
> public static void c_referenced_method1();
> public static void c_referenced_method2();
> }
>
> I hope you got the idea... :P
Yes. It is Java-specific idiom. In Vala, you just use namespace with
non-member functions.
--
Jan 'Bulb' Hudec <[email protected]>
_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list