Thread overview
Does D have object wrappers for primitives?
Jul 29, 2016
stunaep
Jul 29, 2016
Cauterite
Jul 29, 2016
Ali Çehreli
Jul 29, 2016
Cauterite
Jul 29, 2016
Ali Çehreli
Jul 30, 2016
stunaep
Jul 30, 2016
Cauterite
July 29, 2016
I have some java code I need to convert and at one point it uses an Object[] array to store various ints, longs, and strings. Java has built in Integer and Long classes that wrap the primitives in an object and strings are already objects.
July 29, 2016
On Friday, 29 July 2016 at 20:13:34 UTC, stunaep wrote:
> I have some java code I need to convert and at one point it uses an Object[] array to store various ints, longs, and strings. Java has built in Integer and Long classes that wrap the primitives in an object and strings are already objects.

No, but with a template you could easily make your own:

class Boxed(T) {
	T _v;
	alias _v this;
	this(in T v) immutable {_v = v;};
};

auto i = new Boxed!int(6);
July 29, 2016
On 07/29/2016 01:25 PM, Cauterite wrote:
> On Friday, 29 July 2016 at 20:13:34 UTC, stunaep wrote:
>> I have some java code I need to convert and at one point it uses an
>> Object[] array to store various ints, longs, and strings. Java has
>> built in Integer and Long classes that wrap the primitives in an
>> object and strings are already objects.
>
> No, but with a template you could easily make your own:
>
> class Boxed(T) {
>     T _v;
>     alias _v this;
>     this(in T v) immutable {_v = v;};
> };
>
> auto i = new Boxed!int(6);

I was going to suggest Algebraic because it allows arrays of mixed primitive types (wrapped in Algebraic):

  https://dlang.org/phobos/std_variant.html#.Algebraic

Ali

July 29, 2016
On Friday, 29 July 2016 at 20:26:47 UTC, Ali Çehreli wrote:
>
> I was going to suggest Algebraic because it allows arrays of mixed primitive types (wrapped in Algebraic):
>
>   https://dlang.org/phobos/std_variant.html#.Algebraic
>
> Ali

It could work, but keep in mind Algebraic is a structure, not an object.
July 29, 2016
On 07/29/2016 01:40 PM, Cauterite wrote:
> On Friday, 29 July 2016 at 20:26:47 UTC, Ali Çehreli wrote:
>>
>> I was going to suggest Algebraic because it allows arrays of mixed
>> primitive types (wrapped in Algebraic):
>>
>>   https://dlang.org/phobos/std_variant.html#.Algebraic
>>
>> Ali
>
> It could work, but keep in mind Algebraic is a structure, not an object.

Also, I've later noticed that your Box was a class, so it would allow "arrays of mixed primitive types" as well.

Yes, Algebraic is not a struct but Java not having structs doesn't mean that the original code really needed classes either. :)

Ali

July 30, 2016
On Friday, 29 July 2016 at 20:25:16 UTC, Cauterite wrote:
> On Friday, 29 July 2016 at 20:13:34 UTC, stunaep wrote:
>> I have some java code I need to convert and at one point it uses an Object[] array to store various ints, longs, and strings. Java has built in Integer and Long classes that wrap the primitives in an object and strings are already objects.
>
> No, but with a template you could easily make your own:
>
> class Boxed(T) {
> 	T _v;
> 	alias _v this;
> 	this(in T v) immutable {_v = v;};
> };
>
> auto i = new Boxed!int(6);

Thank you. This is just what I needed. I am curious though as to why this doesn't work with strings. It would work if I removed immutable from the Boxed constructor but I thought strings were immutable. I get a compiler error 'not callable using a mutable object'. Even marking a string with the immutable keyword has the same result.
July 30, 2016
On Saturday, 30 July 2016 at 04:12:45 UTC, stunaep wrote:

> Thank you. This is just what I needed. I am curious though as to why this doesn't work with strings. It would work if I removed immutable from the Boxed constructor but I thought strings were immutable. I get a compiler error 'not callable using a mutable object'. Even marking a string with the immutable keyword has the same result.

auto s = new immutable(Boxed!string)(`foo`);

what it's saying is that the box itself needs to be immutable.
Honestly I don't know why it was even possible to make a mutable box in the first place, when the only constructor is marked `immutable`.