Forum » Programiranje » Object[] - arrayUtils.addAll: nerazumljivo obnasanje index-ov
Object[] - arrayUtils.addAll: nerazumljivo obnasanje index-ov
Vanquish ::
Pozdravjeni,
imam eno tezavo - ker nisem iz programerskih vod se obracam na slo-tech za morebitne ideje/resitev.
Torej imam dva dataProvidera za test (TestNG) - groovy
result = dataProvider (Object[][]) kjer imam pojo [[pojo1],[pojo2]]
channeList = dataProvider (Object[][]) kjer so samo stringi nanizani [["string1", "string2],["string3", "string4"],["string5", "string6"]]
Sedaj kaj zelim narediti je, da multipliciram result s channelList (se pravi da pokrijem vse kombinacije), ampak da na koncu vrednost iz channelList koristim za setter v pojo. Se pravi za test potrebujem samo en parameter (result), kateremu pa za vse razlicne verzije kanalov nastavim vrednost y[0]
Sedaj ko pogledam izpise - first pravilno nastavi vrednosti v x, se pravi sama metoda deluje. To je sedaj resitev vezana na groovy - prvo sem resel na enostaven nacin z result.each{blabla}
Ko pa pogledam second vidim, da koncni "test" ni pravilen. Namrec zgodi se, da je za vse variacije x.channel enako - zadnja vrednost iz channelList (string5).
Sedaj kaj sem uspel identificirati je sledece. Ce imam v channelList 3 vrednosti, v result pa 2 imam vse skupaj 6 moznosti. Sedaj ce rocno zelim spremeniti vrednost v test naprimer:
test[5].channel = "lala"
mi ne spremeni samo index 5 temvec 1,3,5 in na tak nacin ko settira
In sedaj je moje vprasanje - kako lahko pride do tega, da so ti indexi med sabo povezani in da en vpliva na ostale? Enostavno mi ni nobene logike tukaj noter.
Ce sem kaj premalo dobro opisal ali bi potrebovali se kaksno informacijo mi prosim recite in bom dopisal.
Vsaka ideja je dobrodosla!
imam eno tezavo - ker nisem iz programerskih vod se obracam na slo-tech za morebitne ideje/resitev.
Torej imam dva dataProvidera za test (TestNG) - groovy
result = dataProvider (Object[][]) kjer imam pojo [[pojo1],[pojo2]]
channeList = dataProvider (Object[][]) kjer so samo stringi nanizani [["string1", "string2],["string3", "string4"],["string5", "string6"]]
Sedaj kaj zelim narediti je, da multipliciram result s channelList (se pravi da pokrijem vse kombinacije), ampak da na koncu vrednost iz channelList koristim za setter v pojo. Se pravi za test potrebujem samo en parameter (result), kateremu pa za vse razlicne verzije kanalov nastavim vrednost y[0]
def test = [result, channelList].combinations { x, y -> x.channel = y[0] System.out.println("first: " + x) x } System.out.println("second: " + test)
Sedaj ko pogledam izpise - first pravilno nastavi vrednosti v x, se pravi sama metoda deluje. To je sedaj resitev vezana na groovy - prvo sem resel na enostaven nacin z result.each{blabla}
Ko pa pogledam second vidim, da koncni "test" ni pravilen. Namrec zgodi se, da je za vse variacije x.channel enako - zadnja vrednost iz channelList (string5).
Sedaj kaj sem uspel identificirati je sledece. Ce imam v channelList 3 vrednosti, v result pa 2 imam vse skupaj 6 moznosti. Sedaj ce rocno zelim spremeniti vrednost v test naprimer:
test[5].channel = "lala"
mi ne spremeni samo index 5 temvec 1,3,5 in na tak nacin ko settira
In sedaj je moje vprasanje - kako lahko pride do tega, da so ti indexi med sabo povezani in da en vpliva na ostale? Enostavno mi ni nobene logike tukaj noter.
Ce sem kaj premalo dobro opisal ali bi potrebovali se kaksno informacijo mi prosim recite in bom dopisal.
Vsaka ideja je dobrodosla!
garamond ::
In sedaj je moje vprasanje - kako lahko pride do tega, da so ti indexi med sabo povezani in da en vpliva na ostale? Enostavno mi ni nobene logike tukaj noter.To se zgodi zaradi tega, ker metoda combinations ne naredi novih kopij Pojo1 in Pojo2, temveč naredi samo nove reference na ta objekta.
def pojoInstance1 = new Pojo1() pojos = [pojoInstance1, pojoInstance1, pojoInstance1] // zgodi se to pojos2 = [new Pojo1(), new Pojo1(), new Pojo1()] // moralo bi biti tako //Poglej kaj se zgodi s spreminjanjem lastnosti objektov v pojo in pojo2Tukaj je na primer identična težava: https://stackoverflow.com/questions/257...
Ali je dovolj jasno, v čem je problem?
Je pa več načinov, kako to popraviti. Sumim, da vgrajena metoda clone ne bo delovala.
- če je možno se izogneš Pojo1 in Pojo2 temveč operiraš na String, Integer in podobno (to se dejansko kopira)
- Ali pa uvedeš novo spremenljivko in narediš nov objekt Pojo za vsako permutacijo posebej.
- Ali sam narediš možnost kopiranja https://www.baeldung.com/java-deep-copy
A parody of extremism is impossible to differentiate from sincere extremism.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Web services - Neveljavni karakterji v XMLOddelek: Programiranje | 4189 (3301) | boolsheat |
» | java, Swing in vmesnik ActionListenerOddelek: Programiranje | 696 (633) | marjan_h |
» | Rekurzija v javi z ArrayListOddelek: Programiranje | 1595 (1438) | marjan_h |
» | java problemOddelek: Programiranje | 749 (629) | Sergio |
» | java + xmlOddelek: Programiranje | 1532 (1288) | GaPe |