Momentarily I thought that might work, but it does match the Json
serialization structure - the context of deserializing an array does not
provide the initialised array, the deserialization procedure has to do the
creation, and only has the type id to work with.  It looks like I'll have
to create an object factory of my own for this, as I don't want to get into
the internals of Json glib.

On Wed, Feb 17, 2016 at 10:09 AM, Daniel Espinosa <eso...@gmail.com> wrote:

> I run in the same issue for GXml and SerializableListArray<>, for example.
>
> The way I resolve, in my case, I've defined a new Interface called
> SerializableCollection, with a init() function. This function is called by
> Serializable.deserialize() method in order to help implementators to
> initialize its generic containers by calling MyObjectCollection.new()
> providing any information it needs like the Generic Type it should work on.
>
> In my other project, I've just initialize any public property as
>
> MyProperty<int> prop { get; set; default = new MyProperty<int>(); }
>
> or inside construct {}
>
> The point is to call MyProperty.new() not Object.new() on generic classes.
>
>
> 2016-02-16 16:59 GMT-06:00 Andy Lees <andrewl...@gmail.com>:
>
>> Yes, the problem is that for types derived from generics (and for the
>> generic constructor itself), the type information is not set in the
>> construct function, so very little can be done.
>>
>> On Wed, Feb 17, 2016 at 9:53 AM, Daniel Espinosa <eso...@gmail.com>
>> wrote:
>>
>>> If you want to execute code on Object creation using Object.new(), you
>>> should use
>>>
>>> construct {
>>>   // Your code here
>>> }
>>>
>>> When define code at MyObject.new(), you execute the code in this method
>>> not Object.new(), then use the above should help.
>>>
>>>
>>> 2016-02-16 15:58 GMT-06:00 Andy Lees <andrewl...@gmail.com>:
>>>
>>>> The problem with Object.new is that it doesn't call the object
>>>> constructor so far as I can tell, just calling g_object_new without any of
>>>> the Vala object construction code.
>>>>
>>>> My Serializable is an interface.  I'm trying to make use of the Json
>>>> serialization framework, and for the most part it's working.  The problem
>>>> I'm having is with the construction of instances of array types - there
>>>> appears to be no factory framework for object creation in Vala, and so far
>>>> the only workaround I've come up with is very clunky.
>>>>
>>>> Is there an object factory somewhere that someone could point me
>>>> towards?
>>>>
>>>> On Wed, Feb 17, 2016 at 1:49 AM, Daniel Espinosa <eso...@gmail.com>
>>>> wrote:
>>>>
>>>>> Try use Object.new(typeof(IntArr))
>>>>>
>>>>> Try to rename type() to any other, to avoid conflics with Object.type()
>>>>>
>>>>> You are trying to implement Gee.ArrayList<>, may you:
>>>>>
>>>>> A) wrap Gee.ArrayList in your class
>>>>>
>>>>> B) Derive directly from Gee.Arraylist then convert your base class
>>>>> Serializable as an interface with all required methods implemented as
>>>>> virtual, then you have two bases.
>>>>>
>>>>> You may want to check at GXml.Serializable interface and its
>>>>> GXml.SerializableArrayList implementation based on Gee.
>>>>> El feb. 16, 2016 7:10 AM, "Andy Lees" <andrewl...@gmail.com> escribió:
>>>>>
>>>>>> I would have expected the generic type to be obtained from the type
>>>>>> id of the derived type (generic instantiation), which is obtained fresh
>>>>>> each execution, but it seems not.  Is the generic type a hidden property 
>>>>>> of
>>>>>> the class derived from the generic class, and if so, what would its name 
>>>>>> be
>>>>>> so that it can be set in the new call?
>>>>>>
>>>>>> Alternatively, is there a way to call an object constructor given the
>>>>>> type id?
>>>>>>
>>>>>> On Tue, Feb 16, 2016 at 11:16 PM, Daniel Espinosa <eso...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Take in account that Type system is dynamically created, then a type
>>>>>>> number will change with each execution.
>>>>>>>
>>>>>>> Use
>>>>>>>
>>>>>>> YourCreatedObject is typeof (Object)
>>>>>>>
>>>>>>> to check if the created object is of type you need, like a derived
>>>>>>> object.
>>>>>>>
>>>>>>> You can use
>>>>>>>
>>>>>>> obj.get_type().is_a(typeof (Object))
>>>>>>>
>>>>>>> And consider that your example is exactly the way to create an
>>>>>>> object of Generic class, because you have set tje object type. Create a
>>>>>>> generic instance with Object.new you should provide the object type.
>>>>>>> El feb. 16, 2016 5:14 AM, "Andy Lees" <andrewl...@gmail.com>
>>>>>>> escribió:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I have a generic array implementation like so:
>>>>>>>>
>>>>>>>> public class GArrSerializable<T> : Serializable, Object  {
>>>>>>>>   public T[] data;
>>>>>>>>   public int length;
>>>>>>>>   public GArrSerializable(int size = 0) {
>>>>>>>>     data = new T[size];
>>>>>>>>   }
>>>>>>>>
>>>>>>>>   public Type type () { return typeof (T); }
>>>>>>>>
>>>>>>>> ...etc
>>>>>>>>
>>>>>>>> and a derived type:
>>>>>>>>
>>>>>>>> public class IntArr : GArrSerializable<int> {
>>>>>>>>
>>>>>>>>   public IntArr(int size = 0) {
>>>>>>>>     base (size);
>>>>>>>>   }
>>>>>>>> }
>>>>>>>>
>>>>>>>> If I create an instance of the type, then instance.type () returns
>>>>>>>> 24 as
>>>>>>>> expected.
>>>>>>>> If I create an instance like so:
>>>>>>>> var ia = Object.@new (type) as IntArr;
>>>>>>>> var t = ia.type ();
>>>>>>>>
>>>>>>>> Then t is 4 rather than 24.  As it is in the instance when it tries
>>>>>>>> to
>>>>>>>> deserialize.
>>>>>>>>
>>>>>>>> Can you tell me why this is so, and how I can programmatically
>>>>>>>> create
>>>>>>>> objects derived from a parameterised type?
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>>
>>>>>>>> Andrew Lees
>>>>>>>> _______________________________________________
>>>>>>>> vala-list mailing list
>>>>>>>> vala-list@gnome.org
>>>>>>>> https://mail.gnome.org/mailman/listinfo/vala-list
>>>>>>>>
>>>>>>>
>>>>>>
>>>>
>>>
>>>
>>> --
>>> Trabajar, la mejor arma para tu superación
>>> "de grano en grano, se hace la arena" (R) (en trámite, pero para los
>>> cuates: LIBRE)
>>>
>>
>>
>
>
> --
> Trabajar, la mejor arma para tu superación
> "de grano en grano, se hace la arena" (R) (en trámite, pero para los
> cuates: LIBRE)
>
_______________________________________________
vala-list mailing list
vala-list@gnome.org
https://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to