Kaip sukurti bendrą masyvą java?

Įdiegus „Java“ generinius vaistus, negalite turėti tokio kodo:

 public class GenSet<E> { private E a[]; public GenSet() { a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation } } 

Kaip tai įgyvendinti, išlaikant tipo saugą?

Mačiau forume „Java“ sprendimą, kuris atrodo taip:

 import java.> 

Bet aš tikrai nesuprantu, kas vyksta.

931
09 февр. tatsuhirosatou nustatyti 09 vas 2009-02-09 20:30 '09 8:30 val. 2009-02-09 20:30
@ 29 atsakymai

Turiu atsakyti į klausimą: ar jūsų „ GenSet “ yra „patikrintas“ arba „nepažymėtas“? Ką tai reiškia?

  • Patikrinta : stiprus spausdinimas. GenSet tiksliai žino, kokio tipo objektus jis turi (ty, jo konstruktorius yra aiškiai vadinamas Class<E> argumentu, o metodai išskiria, kai jiems perduodami argumentai, kurie nėra E tipo. Žr.

    -> šiuo atveju turėtumėte rašyti:

     public class GenSet<E> { private E[] a; public GenSet(Class<E> c, int s) { // Use Array native method to create array // of a type only known at run time @SuppressWarnings("unchecked") final E[] a = (E[]) Array.newInstance(c, s); this.a = a; } E get(int i) { return a[i]; } } 
  • Nepatvirtinta : silpnas spausdinimas. Bet kuriam objektui, perduodamam kaip argumentui, tipo tikrinimas faktiškai neatliekamas.

    -> šiuo atveju turite rašyti

     public class GenSet<E> { private Object[] a; public GenSet(int s) { a = new Object[s]; } E get(int i) { @SuppressWarnings("unchecked") final E e = (E) a[i]; return e; } } 

    Atminkite, kad masyvo komponento tipas turi būti tipo parametro ištrynimas :

     public class GenSet<E extends Foo> { // E has an upper bound of Foo private Foo[] a; // E erases to Foo, so use Foo[] public GenSet(int s) { a = new Foo[s]; } ... } 

Visa tai susiję su gerai žinomu ir apgalvotu generinių vaistų silpnumu „Java“: jis buvo įgyvendintas naudojant ištrynimą, todėl „bendrosios“ klasės nežino, kokio tipo argumentą jie buvo sukurti vykdymo metu, ir todėl negali suteikti tipo saugumo, jei kai kurie arba aiškus mechanizmas (tipo patikra).

609
10 февр. Atsakymą pateikė Varkhanas vasario 10 d. 2009-02-10 01:19 '09 ne 1:19 2009-02-10 01:19

Tai galite padaryti:

 E[] arr = (E[])new Object[INITIAL_ARRAY_LENGTH]; 

Tai yra vienas iš siūlomų būdų, kaip įdiegti universalią kolekciją efektyviame „Java“; 26 dalis. Jokių tipų klaidų, nereikia perrašyti masyvo. Tačiau tai sukelia įspėjimą, nes jis yra potencialiai pavojingas ir turėtų būti naudojamas atsargiai. Kaip išsamiai aprašyta komentaruose, šis Object[] dabar Object[] užmaskuotas kaip mūsų E[] tipas ir gali sukelti netikėtas klaidas arba ClassCastException jei naudojamas ClassCastException .

border=0

Paprastai šis elgesys yra saugus, jei dauguma masyvo yra naudojama viduje (pvz., Palaikyti duomenų struktūrą), o kliento kodas negrąžina ar veikia. Jei reikia sugrąžinti bendrinio tipo masyvą į kitą kodą, paminėta refleksijos klasė yra teisingas būdas.


Verta pažymėti, kad, kai tik įmanoma, jums bus daug maloniau dirbti su List o ne masyvais, jei naudojatės generiniais vaistais. Žinoma, kartais jūs neturite kito pasirinkimo, tačiau rinkimo sistemos naudojimas yra daug saugesnis.

169
27 мая '10 в 23:00 2010-05-27 23:00 atsakymas pateikiamas dimo414 gegužės 27 d. 10 val. 23:00 2010-05-27 23:00

Čia, kaip naudoti generinius vaistus, kad gautumėte būtent tokio tipo masyvą, kurio ieškote, išlaikant tipo saugą (o ne kitus atsakymus, kurie grąžins Object masyvą arba sukurs įspėjimus kompiliavimo metu)

 import java.> 

Jis sukaupia be įspėjimo ir, kaip matote iš main , bet kuriam tipui, kurį paskelbiate GenSet egzemplioriu, galite priskirti šio tipo masyvą ir galite priskirti elementą iš šio tipo kintamojo, o tai reiškia, kad masyvas ir masyvo reikšmės yra tinkamo tipo.

Jis veikia naudodamas klasikinius skaitiklius kaip runtime tipo žetonų, kaip aprašyta „ Java“ vadovuose . Kompiliatorius apdoroja klasės literatūrą kaip java.> pavyzdžius. Norėdami jį naudoti, tiesiog sekite klasės pavadinimą su .class . Taigi String.class veikia kaip Class objektas, atitinkantis String klasę. Tai taip pat veikia sąsajoms, enumams, masyvioms matricoms (pvz., String[].class ), primityviems (pvz., int.class ) ir raktiniam žodžiui (ty void.class ).

Class yra bendrinė (deklaruojama kaip Class<T> , kur T reiškia tipą, kurį žymi Class objektas), o tai reiškia, kad String.class tipas yra Class<String> .

Taigi, kai skambinate „ GenSet konstruktoriui, pirmojo argumento atveju perduodate klasę, atitinkančią „ GenSet egzemplioriaus deklaruoto tipo masyvą (pvz., String[].class GenSet<String> String[].class GenSet<String> ). Atkreipkite dėmesį, kad negalite gauti primityvų masyvo, nes primityvų negalima naudoti tipo kintamiesiems.

Konstruktoriaus viduje skambinant į „ cast metodą grąžinamas Object argumentas, perduotas klasei atstovaujamai Class , kuriam buvo paskirtas metodas. Skambinant statinio „ newInstance metodu „ java.> , kaip Object grąžinamas kaip pirmasis argumentas perduodamo tipo Object masyvas, o antrasis argumentas - int reikšme. Skambinant getComponentType metodu, grąžinamas Class objektas, vaizduojantis masyvo komponento tipą, kurį žymi Class objektas, kuriam buvo naudojamas metodas (pvz., String.class String[].class , null jei Class objektas nerodo masyvo).

Paskutinis sakinys nėra visiškai tikslus. Skambinimo String[].class.getComponentType() grąžina Class objektą, atitinkantį String klasę, tačiau jos tipas yra Class<?> Ir ne Class<String> , todėl jūs negalite kažką panašaus daryti.

 String foo = String[].class.getComponentType().cast("bar"); // won't compile 

Tas pats kiekvienam Class kuris grąžina Class objektą.

Kalbant apie Joachim Sauerio komentarą apie šį atsakymą (aš neturiu pakankamai reputacijos, kad galėčiau jį pakomentuoti), pavyzdys bus rodomas paspaudus T[] įspėjimą, nes kompiliatorius šiuo atveju negali garantuoti tipo saugos.


Redaguoti „Ingo“ komentarą:

 public static <T> T[] newArray(Class<T[]> type, int size) { return type.cast(Array.newInstance(type.getComponentType(), size)); } 
58
19 нояб. gdejohn atsakymas . 2010-11-19 06:30 '10, 6:30 val. 2010-11-19 06:30

Tai vienintelis saugus atsakymas pagal tipą.

 E[] a; a = newArray(size); @SafeVarargs static <E> E[] newArray(int length, E... array) { return Arrays.copyOf(array, length); } 
36
08 нояб. atsakymas pateikiamas nepriekaištingai . 2011-11-08 18:28 '11 at 18:28 2011-11-08 18:28

Norėdami išplėsti į didesnį dydį, tiesiog pridėkite [] ir matavimo parametrus į newInstance() ( T yra tipo parametras, cls yra Class<T> , d1d5 yra sveikieji skaičiai):

 T[] array = (T[])Array.newInstance(cls, d1); T[][] array = (T[][])Array.newInstance(cls, d1, d2); T[][][] array = (T[][][])Array.newInstance(cls, d1, d2, d3); T[][][][] array = (T[][][][])Array.newInstance(cls, d1, d2, d3, d4); T[][][][][] array = (T[][][][][])Array.newInstance(cls, d1, d2, d3, d4, d5); 

Daugiau informacijos rasite „ Array.newInstance() .

28
15 авг. Atsakyti Jasonui C 15 rug. 2013-08-15 16:47 '13, 16:47, 2013-08-15 16:47

„Java 8“ sistemoje mes galime sukurti tam tikrą bendrą masyvo kūrimą naudojant lambda nuorodą arba metodą. Tai panaši į refleksinį požiūrį (kuris eina per Class ), bet čia mes nenaudojame refleksijos.

 @FunctionalInterface interface ArraySupplier<E> { E[] get(int length); } class GenericSet<E> { private final ArraySupplier<E> supplier; private E[] array; GenericSet(ArraySupplier<E> supplier) { this.supplier = supplier; this.array = supplier.get(10); } public static void main(String[] args) { GenericSet<String> ofString = new GenericSet<>(String[]::new); GenericSet<Double> ofDouble = new GenericSet<>(Double[]::new); } } 

Pavyzdžiui, jį naudoja <A> A[] Stream.toArray(IntFunction<A[]>) .

Tai taip pat gali būti atlikta prieš Java 8 naudojant anonimines klases, tačiau tai yra sudėtingesnė.

11
05 марта '14 в 17:14 2014-03-05 17:14 atsakymą Radiodefas pateikė kovo 14 d. 14 d. 17:14 2014-03-05 17:14

Tai aprašyta 5 skyriuje (Generics) Efektyvus Java, 2-asis leidimas , 25 pastraipa

Jūsų kodas veiks, nors jis sukurs nepatvirtintą įspėjimą (kurį galite atsisakyti su tokia anotacija:

 @SuppressWarnings({"unchecked"}) 

Tačiau tikriausiai geriau naudoti sąrašą vietoj masyvo.

OpenJDK“ projekto svetainėje yra įdomi diskusija apie šią klaidą / funkciją.

10
09 февр. Jeffo Olsono atsakymas 09 vasaris 2009-02-09 21:50 '09, 9:50 val. 2009-02-09 21:50

„Java“ generatoriai atlieka tipų tikrinimą kompiliuojant ir įterpdami tinkamus vaizdus, ​​bet ištrindami tipus kompiliuotuose failuose. Tai leidžia bendrai naudojamoms bibliotekoms naudotis kodais, kurie nesupranta generinių vaistų (tai buvo sąmoningas sprendimas dėl dizaino), tačiau tai reiškia, kad paprastai negalite sužinoti, koks tipas yra vykdomas.

Atviras Stack(Class<T> clazz,int capacity) konstruktorius Stack(Class<T> clazz,int capacity) reikalauja, kad pravažiuosite klasės objektą vykdymo metu, o tai reiškia, kad informacija apie klasę pasiekiama vykdymo metu, kodui reikia. Class<T> reiškia, kad kompiliatorius patikrina, ar siunčiamas klasės objektas yra T klasės klasės objektas. Ne T klasė, o ne T klasė, bet tiksliai T.

Tai reiškia, kad savo konstruktoriuje galite sukurti tinkamo tipo masyvo objektą, o tai reiškia, kad objektų, kuriuos saugote savo kolekcijoje, tipas bus patikrintas, kai jie bus įtraukti į kolekciją.

7
11 февр. Bill Michell atsakymas, pateiktas vasario 11 d 2009-02-11 13:07 '09, 13:07 2009-02-11 13:07

Sveiki, nors srautas yra miręs, norėčiau atkreipti jūsų dėmesį į tai:

Fono informacija naudojama tipų tikrinimui rengiant:

  • Todėl siekiama patikrinti, ar tai, ko reikia, yra tai, ko jums reikia.
  • Tai, ką sugrįžote, yra tai, ką reikia vartotojams.
  • Išbandykite:

2019

6
14 июня '11 в 22:26 2011-06-14 22:26 atsakymą pateikė puneeth, birželio 14 d., 11 d., 10:26 pm. 2011-06-14 22:26

Radau greitą ir paprastą būdą, kuris veikia man. Atkreipkite dėmesį, kad tai naudoju tik „Java JDK 8“. Nežinau, ar ji veiks su ankstesnėmis versijomis.

Nors negalime sukurti bendro konkretaus tipo parametro masyvo pavyzdžio, mes galime perduoti jau sukurtą masyvą į bendrą klasės konstruktorių.

 class GenArray <T> { private T theArray[]; // reference array // ... GenArray(T[] arr) { theArray = arr; } // Do whatever with the array... } 

Dabar iš esmės mes galime sukurti tokį masyvą:

 class GenArrayDemo { public static void main(String[] args) { int size = 10; // array size // Here we can instantiate the array of the type we want, say Character (no primitive types allowed in generics) Character[] ar = new Character[size]; GenArray<Character> = new Character<>(ar); // create the generic Array // ... } } 

Norėdami gauti daugiau lankstumo su matricomis, galite naudoti, pavyzdžiui, susietą sąrašą. ArrayList ir kiti metodai, rasti Java.util.ArrayList klasėje.

5
09 нояб. atsakymas pateikiamas Nik-Lz . 2016-11-09 23:43 '16 at 11:43 pm 2016-11-09 23:43

Kaip apie šį sprendimą?

 @SafeVarargs public static <T> T[] toGenericArray(T ... elems) { return elems; } 

Jis veikia ir atrodo pernelyg paprastas, kad būtų tiesa. Ar yra trūkumas?

5
21 февр. Benjamin M atsakymą pateikė vasario 21 d. 2016-02-21 04:28 '16 at 4:28 2016-02-21 04:28

Jums nereikia perduoti klasės argumento konstruktoriui. Išbandykite.

 public class GenSet<T> { private final T[] array; @SuppressWarnings("unchecked") public GenSet(int capacity, T... dummy) { if (dummy.length > 0) throw new IllegalArgumentException( "Do not provide values for dummy argument."); Class<?> c = dummy.getClass().getComponentType(); array = (T[])Array.newInstance(c, capacity); } @Override public String toString() { return "GenSet of " + array.getClass().getComponentType().getName() + "[" + array.length + "]"; } } 

ir taip pat

 GenSet<Integer> intSet = new GenSet<>(3); System.out.println(intSet); System.out.println(new GenSet<String>(2)); 

rezultatas:

 GenSet of java.> 
4
12 июля '17 в 0:53 2017-07-12 00:53 atsakymas pateikiamas saka1029 liepos 12 d., 17 val. 0:53 2017-07-12 00:53

Taip pat žiūrėkite šį kodą:

 public static <T> T[] toArray(final List<T> obj) { if (obj == null || obj.isEmpty()) { return null; } final T t = obj.get(0); final T[] res = (T[]) Array.newInstance(t.getClass(), obj.size()); for (int i = 0; i < obj.size(); i++) { res[i] = obj.get(i); } return res; } 

Jis konvertuoja bet kurio objekto sąrašą į tos pačios rūšies masyvą.

4
09 авг. MatheusJardimB atsakymas 09 rug . 2013-08-09 02:32 '13, 2:32 2013-08-09 02:32

Padariau šį kodo fragmentą, kad atspindėtų klasės egzempliorių, kuris buvo perduotas paprastam be priežiūros testui.

 Object attributeValue = null; try { if(clazz.isArray()){ Class<?> arrayType = clazz.getComponentType(); attributeValue = Array.newInstance(arrayType, 0); } else if(!clazz.isInterface()){ attributeValue = BeanUtils.instantiateClass(clazz); } } catch (Exception e) { logger.debug("Cannot instanciate \"{}\"", new Object[]{clazz}); } 

Atkreipkite dėmesį į šį segmentą:

  if(clazz.isArray()){ Class<?> arrayType = clazz.getComponentType(); attributeValue = Array.newInstance(arrayType, 0); } 

inicijuoti masyvą, kuriame Array.newInstance ( masyvo klasė, masyvo dydis) . Klasė gali būti primityvioji (int.class) arba objektas (Integer.class).

BeanUtils yra pavasario dalis.

3
31 авг. Atsakymas suteiktas Bobsteriui 31 d. 2012-08-31 13:39 '12, 13:39 pm 2012-08-31 13:39

Pavyzdžiui, „Java“ atspindys sukuriamas masyvui sukurti. Tai paprastai nerekomenduojama, nes ji nėra tipiška. Vietoj to, turėtumėte naudoti tik vidinį sąrašą ir vengti masyvo.

3
09 февр. Atsakymas pateikiamas Ola Bini 09 vasario 9 d. 2009-02-09 20:33 '09 ne 20:33 2009-02-09 20:33

Tiesą sakant, tai yra paprastesnis būdas - sukurti objektų masyvą ir pritaikyti jį norimam tipui, kaip nurodyta šiame pavyzdyje:

 T[] array = (T[])new Object[SIZE]; 

kur SIZE yra pastovus ir T yra tipo identifikatorius

3
12 июня '15 в 12:40 2015-06-12 12:40 atsakymą pateikė Pedramas Esmaeelis birželio 12 d. 15 val. 12:40 2015-06-12 12:40

Vertybių sąrašo perdavimas ...

 public <T> T[] array(T... values) { return values; } 
2
15 сент. Atsakymas, kurį pateikė Rodrigo Asensio 15 Sep. 2017-09-15 13:19 '17, 13:19 2017-09-15 13:19

Kitų žmonių pasiūlytas priverstinis metimas man neveikė, o tai buvo išimtis iš neteisėto liejimo.

Tačiau šis numanomas darbas buvo gerai atliktas:

 Item<K>[] array = new Item[SIZE]; 

kur elementas yra I klasė, kurioje yra narys:

 private K value; 

Taigi, jūs gaunate K tipo masyvą (jei elementas turi tik vertę) arba bet kokį bendrą tipą, kurį norite apibrėžti klasės elemente.

1
15 сент. atsakymas pateikiamas vnportnoy 15 sep . 2013-09-15 00:26 '13 0:26 2013-09-15 00:26

Niekas neatsakė į klausimą, kas vyksta minėtame pavyzdyje.

 import java.> 

Kaip sakė kiti, generiniai vaistai „ištrinami“ rengiant. Taigi, vykdymo metu, bendrasis pavyzdys nežino, kas yra jo komponentas. To priežastis yra istorinė, „Sun“ norėjo papildyti generinius vaistus nepažeisdama esamos sąsajos (tiek šaltinio, tiek dvejetainio).

Kita vertus, matavimo elementai yra žinomi jų tipo komponentams.

Šis pavyzdys sukelia problemą, kai kodas, skambinantis konstruktoriui (kuris žino tipą), praeina parametrą, nurodantį klasės reikalingą tipą.

Taigi programa sukurs klasę su kažkuo panašiu

 Stack<foo> = new Stack<foo>(foo.class,50) 

dabar konstruktorius žino (vykdymo metu), kas yra komponento tipas, ir gali naudoti šią informaciją, kad sukurtų masyvą per atspindžio API.

 Array.newInstance(clazz, capacity); 

Galiausiai, turime tipą, nes kompiliatorius nežino, kad „ Array#newInstance() grąžinta Array#newInstance() yra teisingas tipas (nors ir žinome).

Šis stilius yra šiek tiek bjaurus, tačiau kartais tai gali būti mažiausiai blogas sprendimas kurti bendrus tipus, kurie dėl tam tikrų priežasčių turi žinoti savo komponento tipą vykdymo metu (masyvų kūrimas arba jų komponento tipų kūrimas ir tt).

1
17 окт. atsakymas duodamas plugwash 17 okt. 2015-10-17 08:49 '15, 8:49, 2015-10-17 08:49

Radau šiek tiek darbo sau.

Žemiau esanti eilutė generuoja bendrą matricos klaidą.

 List<Person>[] personLists=new ArrayList<Person>()[10]; 

Tačiau, jei aš atskiriu klasę į List<Person> , jis veikia.

 import java.util.ArrayList; import java.util.List; public class PersonList { List<Person> people; public PersonList() { people=new ArrayList<Person>(); } } 

Jūs galite atskleisti asmenį „PersonList“ klasėje per „getter“. Toliau pateiktoje eilutėje bus matrica, kurioje kiekviename elemente yra List<Person> . Kitaip tariant, masyvų List<Person> .

 PersonList[] personLists=new PersonList[10]; 

Kažką kodą, kurį dirbau, reikėjo kažką panašaus, ir tai aš dariau, kad tai veiktų. Dar nėra problemų.

1
19 окт. atsakymas pateikiamas developer747 19 sp. 2016-10-19 04:04 '16 at 4:04 2016-10-19 04:04

pabandykite.

 private int m = 0; private int n = 0; private Element<T>[][] elements = null; public MatrixData(int m, int n) { this.m = m; this.n = n; this.elements = new Element[m][n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { this.elements[i][j] = new Element<T>(); } } } 
0
13 февр. David Bernard atsakymas vasario 13 d 2011-02-13 23:37 '11 11:37 pm 2011-02-13 23:37

Aš suradau gana unikalų sprendimą, kad galėčiau apeiti nesugebėjimą inicijuoti bendrą masyvą. Turite sukurti klasę, kuri priima bendrą kintamąjį T, kaip šis:

 class GenericInvoker <T> { T variable; public GenericInvoker(T variable){ this.variable = variable; } } 

ir tada savo masyvo klasėje tiesiog paleiskite ją taip:

 GenericInvoker<T>[] array; public MyArray(){ array = new GenericInvoker[]; } 

pradedant nuo new Generic Invoker[] , problema bus išspręsta, bet tikrai neturėtų būti jokių problemų.

Norėdami gauti iš masyvo, turite pakviesti masyvą [i].

 public T get(int index){ return array[index].variable; } 

Likusi dalis, pvz., Matricos dydžio keitimas, gali būti atlikta naudojant „Arrays.copyOf“ ():

 public void resize(int newSize){ array = Arrays.copyOf(array, newSize); } 

Taip pat galite pridėti šią funkciją:

 public boolean add(T element){ // the variable size below is equal to how many times the add function has been called // and is used to keep track of where to put the next variable in the array arrays[size] = new GenericInvoker(element); size++; } 
0
28 июня '17 в 22:59 2017-06-28 22:59 atsakymas pateikiamas Krabų ūkas birželio 28 d. 17 d. 10:59 pm 2017-06-28 22:59

Galbūt tai nėra susijusi su šiuo klausimu, bet iki šiol gavau klaidą < generic array creation naudoti

 Tuple<Long,String>[] tupleArray = new Tuple<Long,String>[10]; 

Naudodamasis @SuppressWarnings({"unchecked"}) išsiaiškinu šį darbą (ir dirbau už mane @SuppressWarnings({"unchecked"}) :

  Tuple<Long, String>[] tupleArray = new Tuple[10]; 
0
21 авг. Atsakyti Mohsen Afshin 21 rug . 2013-08-21 19:11 '13, 19:11, 2013-08-21 19:11

Paprastas, nors ir būtinas sprendimas, būtų pridėti antrosios klasės „turėtoją“ savo pagrindinėje klasėje ir naudoti ją saugoti savo duomenis.

 public class Whatever<Thing>{ private class Holder<OtherThing>{ OtherThing thing; } public Holder<Thing>[] arrayOfHolders = new Holder<Thing>[10] } 
0
05 апр. „StarMonkey“ atsakymas yra 05 Bal. 2012-04-05 03:10 '12 at 3:10 2012-04-05 03:10

Įdomu, ar šis kodas sukurs veiksmingą bendrą masyvą?

 public T [] createArray(int desiredSize){ ArrayList<T> builder = new ArrayList<T>(); for(int x=0;x<desiredSize;x++){ builder.add(null); } return builder.toArray(zeroArray()); } //zeroArray should, in theory, create a zero-sized array of T //when it is not given any parameters. private T [] zeroArray(T... i){ return i; } 

Redagavimas: Galbūt alternatyvus būdas sukurti tokią masyvą, jei jūsų žinomas ir mažas dydis būtų žinomas ir mažas, būtų paprasčiausiai pateikti reikiamą „nulio“ skaičių į „zeroArray“ komandą?

Nors akivaizdu, kad tai nėra taip universalus kaip naudojant „CreateArray“ kodą.

0
09 июля '14 в 16:36 2014-07-09 16:36 atsakymą pateikė Cambot liepos 9 d. 14 d. 16:36 2014-07-09 16:36

Galite sukurti objektų masyvą ir perkelti jį į E visur. Taip, tai nėra labai švarus būdas tai padaryti, bet jis turėtų bent jau dirbti.

0
09 февр. atsakymas, kurį pateikė Esko 2009-02-09 20:46 '09 ne 20:46 2009-02-09 20:46

Galite naudoti transliaciją:

 public class GenSet<Item> { private Item[] a; public GenSet(int s) { a = (Item[]) new Object[s]; } } 
0
15 сент. atsakymas pateikiamas samir benzenine 15 sep . 2014-09-15 20:23 '14, 20:23, 2014-09-15 20:23
 private E a[]; private int size; public GenSet(int elem) { size = elem; a = (E[]) new E[size]; } 
-1
03 июня '15 в 8:52 2015-06-03 08:52 Zubair Ibrhaim atsakymą pateikė birželio 03 d. 15 val. 15:52 2015-06-03 08:52

Universalioje masyvo kūrimas yra draudžiamas java, bet galite tai padaryti

 class Stack<T> { private final T[] array; public Stack(int capacity) { array = (T[]) new Object[capacity]; } } 
-1
19 апр. Irfan Ul Haq atsakymas 19 d 2018-04-19 16:45 '18 at 4:45 pm 2018-04-19 16:45