» »

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]
        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!

Vanquish ::

any1 :)?

garamond ::

Vanquish je izjavil:

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 pojo2
Tukaj 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.

Vanquish ::

najlepsa hvala! Bo kr pomagalo zaenkrat!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Web services - Neveljavni karakterji v XML

Oddelek: Programiranje
314189 (3301) boolsheat
»

java, Swing in vmesnik ActionListener

Oddelek: Programiranje
5696 (633) marjan_h
»

Rekurzija v javi z ArrayList

Oddelek: Programiranje
81595 (1438) marjan_h
»

java problem

Oddelek: Programiranje
7749 (629) Sergio
»

java + xml

Oddelek: Programiranje
81532 (1288) GaPe

Več podobnih tem