java - Generic list conversion to an array -


assuming have following class

public class <t>{      private t [] datas;     // more code here ... } 

and desire take advantage of constructor initialize array. suppose have following constructor

public a(t element){....} 

java not allow me use like

datas = new t[10] 

and complain cannot create generic array of t can still use work around like:

 @suppresswarnings("unchecked")     public a(t element){         list<t> dataslist = new arraylist<t>();        dataslist.add(element);        datas =(t[]) dataslist.toarray();     } 

i have warning compiler that's why had add @suppresswarnings, point related following comment toarray method documentation (please take @ picture)

enter image description here

it talks returned array being safe. so means safe use method? if not why? , better way such initialisation in constructor? consider case of variable list of t elements in overloaded constructor

public a(t... elements){....}.

you can create instance of generic array using following:

public a(t element){   int length = 10;   datas  = (t[])array.newinstance(element.getclass(), length); } 

however, there's problem if element subclass of t, e.g. if you'd call this:

a<number> numbera = new a<>( integer.valueof(1) ); 

here t number class of element integer. mitigate pass vararg array of type t, e.g. this:

//firstelement exists force caller provide @ least 1 element //if don't want use varargs array a(t firstelement, t... furtherelements){         int length = 10;   class<?> elementclass = furtherelements.getclass().getcomponenttype();         datas  = (t[])array.newinstance( elementclass, length); } 

since varargs result in array (even of length 0) you'll array of type t , can component type of that.

so in case above numbera.datas number[] array , not integer[] array.


Comments

Popular posts from this blog

php - How to add and update images or image url in Volusion using Volusion API -

javascript - IE9 error '$'is not defined -