- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Android szakmai topik
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Samsung Galaxy S26 Ultra - fontossági sorrend
- Yettel topik
- Huawei Watch GT 6 és GT 6 Pro duplateszt
- iPhone topik
- Huawei Watch Fit 5 Pro - jó forma
- Apple iPhone 17e – mágnesek ereje
- Honor 600 – kezes, kitartó, költséges
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
BE4GLE
senior tag
Ettől féltem. (Próbálok többek, több kérdésére is választ adni, nem csak neked.)
Amin dolgozom, az egy céges JAVA backend library. A valós feladat, hogy az ügyfél listákat tudjon létrehozni egy adott parent-child business object-ből (listánként vagy csak az egyik, vagy csak a másik). A listáknak azonban különböző saját tulajdonságaik lehetnek (jó lenne ha dinamikusan lehetne őket kreálni és nem kéne folyton a CD-t dolgoztatni), sőt maguk a kapcsolatok is változó változókkal bírnak. Tehát egy BO többször is szerepelhet a listában, ha a kapcsolatnak mások a paraméterei.
Az egyszerűen menne, hogy lepéldányosítok egy közös interfészt, de az nem oldja meg, hogy minden új típusú listára új osztályt kéne csinálnom. Ha csinálok egy lista osztályt és abba dobok egy "tömböt" a plusz paraméterekről, akkor viszont azokat folyton cast-olnom kellene. Ezért gondoltam, hogy inkább csinálok ahhoz is egy marker interfészt, plusz bele az említett függvényt a lehetséges értékekkel és akkor a kliens oldalon nulla tudással lehet kezelni a dolgot.
A backend-nél arra gondoltam, hogy ha foreign key-t szeretnék a különböző paraméterekre, akkor az macerásabb. Listatípusonként tudok csinálni egy táblát, a típusleíróba meg beírom a hozzátartozó tábla nevét, de kicsit mókolásnak érzem.
De bármennyire is keresek, nem találok rá elegáns megoldást.Én ugyan mobil fejlesztő vagyok, de az a tapasztalatom, hogy az öröklődéssel szemben sokszor ésszerűbb kompozíciót használni. Nem tudom, hogy ez segít-e, de talán ötletet ad ahhoz, hogy másként közelítsd meg a problémát. Persze miután Google-öztél egy picit a témában.
-
BE4GLE
senior tag
Kicsit a logisztikával vagyok bajban, ha piconetet használnék. Ami esetet írsz, vélhetően egy helyi windows-os gép volt a piconet központ, és amikor beérkezett egy új android a hatósugárba, már tudta, melyik piconet-het csatlakozzon, csatlakozott, és jelezte, hogy érkezik az ember. Ha rosszul sejtem, javíts ki.
Ha egy kliens piconet-hez csatlakozik, egyszerre csak egy központhoz csatlakozhat. Oda küldheti el az üzenetet. Aztán kotorásznia kell a többi beacon után, csatlakozni oda, és küldeni üzenetet újra. Kicsit hasonló szitu, mint amikor vonalas LAN-on letiltják a multicast csomagokat, és következésképp ha küldeni akarsz egy multicast-ot, fel kell deríteni az összes állomást, és egyesével elküldeni a csomagokat. Mindazt a temérdek sok kommunikációt végezni el ahelyett, hogy csak kiküldenél egy szem multicast csomagot, és aki kapta, kapta, aki nem, az nem. Vonalas LAN-on még letojnám az esetet, mert úgyis hálózatról megy minden, van energia. Mobil telefon esetében akkumulátor van véges kapacitással.
Nem jobb a helyzet akkor sem, ha a mobil telefon a beacon. A beacon-nek állandóan üzemben kell lennie ahelyett, hogy mondjuk időzített job jelleggel 5 percenként egyszer feléled, kidob egy üzenetet a környezetének, aki kapta, kapta, aki nem, az nem, ignore, és alkalmazás lepihen újra. Beacon esetében nincsen pihi. Akku kajálás van helyette.
Szóval ez a bajom a piconet-tel, és ezért akarok inkább broadcast send-et.
Ha az nem létezik, még kiegészítőként azon gondolkodok el, hogy windows-on be lehet-e állítani low energy beacon-t, és az korlátozná a hatósugarat. Lehetségesen csak korlátos számú master lehet a környezetben egy adott időpillanatban. Viszont az eddigiekben nem találtam arra módot, hogy piconet-hez csatlakozó kliens hogyan kérdezheti meg a master-től az adási energia szintet. Ha megkérdezheti, az még mindig kommunikáció minden master felé, amit a master nem biztos, hogy venni fog, mert míg a master ad 100 mW-on, a slave 1 mW-on, a slave megkapja az üzenetet, a master nem, és kivárási idő telik el minden alkalommal, mire kiderül, hogy "az a hálózat messze van". Nem csak az én beacon-jeim lehetnek ott, de ezernyi másik ugyan úgy. Ha lehetne azt párhuzamosan, minden létező beacon-höz egyszerre csatlakozni, talán megpróbálnám, de ahogy olvasgattam, arra nincsen támogatás, csak egyik a másik után, és úgy a szükséges idő már nem korlátos.
Igazából ezt úgyis megpróbálhatod, hogy csinálsz stream-et, amire egy windows-os kliens feliratkozik. Ez amolyan push gateway lenne. Beállíthatod, hogy automatikusan induljon windows boot-nál. Ez a kliens jelzi a szerver app felé, hogy jelen van, ha csatlakozott az ottani hálózatra. Ergo a közelben van. Annyit kell még megoldani, hogy ledobáld azokat, akik nincsenek már jelen.
A szervernek nem kell androidos eszköznek lennie. Elég, ha van egy endpoint, amin lehet üzetet küldeni a feliratkozóknak. Az üzenet küldés android oldalon pedig csak simán ennek a végpontnak a meghívása lenne.
-
BE4GLE
senior tag
Nem akarok piconetet, nem akarok semmi kapcsolódást. Publikus információt akarok kiküldeni bármilyen vevőnek, ami éppen akkor éppen ott van vagy nincs. A többi eszköz tervezetten windows-os lesz, de annak nem kellene számítson, ha nem barkácsolok át szabványos alapokat.
A fenti linken olyan sok mappa van mappa hátán, hogy még keresem a levesben a húst, hogy a saját függvények rétegei alatt végül mit használ

Ez így inkább beacon-nek hangzik. Többnyire marketing kommunkiációhoz használják. Én a második linken található library-t használtam is néhány éve. Bár az a prokekt pont nem marketing célú volt. Elhelyeztünk ilyen beacon-öket a cég épületében, és így lehetett tudni, ha valaki megérkezett az irodába.
-
BE4GLE
senior tag
Nem teljesen java, inkább OOP kérdés, amiben kicsit elveszve érzem magam.
Vannak állataink, legyen mondjuk kenguru és tigris. Szeretnénk építeni egy cirkuszt, több ilyen állattal.
A cirkusz igazgató le tud hívni egy állatlistát, amiben látja mindkét fajt és az adataikat, pl. születési év. Illetve ha kiválaszt egyet, akkor utasítást adhat pl. egy gombbal. Mindkét állat tud a farkán ugrálni, viszont a kenguru el is tud rejteni valamit az erszényében.
A problémám, hogy sokak szerint egy instanceof mindig code smell. Akár leszármazást, akár kompozíciót használok, valahogy meg kell tudnom a lista egy adott elméről, hogy milyen többlet képessége.
Hogyan lehet ezt szépen megoldani?
Illetve lehet-e dinamikussá tenni az egészet, hogy kódváltoztatás nélkül új fajokat kreáljon az igazgató, amik saját "képességekkel" rendelkeznek?Az OOP-vel könnyű átesni a ló túloldalára és túlkomplikálni egy egyszerű problémát. Pl. ha a kenguru el tud rejteni valamit azt lehet simán relációs adatszerkezetként is értelmezni. X elrjeti Y-t. Ez akár tárolható egy táblában is. A kengurunak nincs szüksége "elrejt" metódusra. Az lehet egy tőle független metódus. Az ugrás szintén egyszerű. Hiszen olyankor mozgatod és animálod az állat objektumot. Nem feltétlenül kell tudnia magáról, hogy ő képes e ugrani. Az ugrás metódus majd eldönti, hogy az adott faj képes e rá. Mozgatja és keres hozzá egy animációt, ha van. Ez mind megoldható faj azonosítóval. Nem kell instanceof. Próbáld az adatszerlezeteidet minél egyszerűbre írni. Egy állat nagyon sok mindenre képes. Hatalmas osztályaid lesznek, kismillió őssel, ha ilyen szemléletben tervezed őket. És az végül mindig visszaüt.
-
BE4GLE
senior tag
-
BE4GLE
senior tag
Nem teljesen java, inkább OOP kérdés, amiben kicsit elveszve érzem magam.
Vannak állataink, legyen mondjuk kenguru és tigris. Szeretnénk építeni egy cirkuszt, több ilyen állattal.
A cirkusz igazgató le tud hívni egy állatlistát, amiben látja mindkét fajt és az adataikat, pl. születési év. Illetve ha kiválaszt egyet, akkor utasítást adhat pl. egy gombbal. Mindkét állat tud a farkán ugrálni, viszont a kenguru el is tud rejteni valamit az erszényében.
A problémám, hogy sokak szerint egy instanceof mindig code smell. Akár leszármazást, akár kompozíciót használok, valahogy meg kell tudnom a lista egy adott elméről, hogy milyen többlet képessége.
Hogyan lehet ezt szépen megoldani?
Illetve lehet-e dinamikussá tenni az egészet, hogy kódváltoztatás nélkül új fajokat kreáljon az igazgató, amik saját "képességekkel" rendelkeznek?Szerintem az insteanceof önmagában még nem code smell. Kotlinban sem code smell az is operator. Sőt, ha használod, még smart cast-olja is az objektumot. A java azért más picit, mert ott neked kell cast-olni. Inkább azt mondanám, hogy könnyű code smell-t csinálni vele javaban. Például figyelni kell, hogy csakis final pointerre hívd meg, mert hiába csekkolod, hogy instanceof ha később változhat az object amire a pointer mutat.
-
BE4GLE
senior tag
"An unmodifiable collection is not necessarily immutable. If the contained elements are mutable, the entire collection is clearly mutable, even though it might be unmodifiable. For example, consider two unmodifiable lists containing mutable elements. The result of calling list1.equals(list2) might differ from one call to the next if the elements had been mutated, even though both lists are unmodifiable. However, if an unmodifiable collection contains all immutable elements, it can be considered effectively immutable. "
Azt a kotlin extension-ök sem állítják, hogy a listOf(...) eredménye immutable. Szóval nekem tökéletesen megfelel a kotlinos elnevezés. És annak legaláb egy olyan List a visszatérési értéke, aminek nincs add metódusa, ami aztán random RuntimeException-t dobál, mint a javas alternatívák. De abban egyetértünk, hogy lista elemeinek is immutable-nek kell lenniük.

-
BE4GLE
senior tag
Android vonalon én java 8-nál tetőztem. Kotlinban ez pl. így működik:
listOf(...) és mapOf(...) ha final kell és
mutableListOf(...) és mutableMapOf(...) ha mutable kellAz List.of szintén List típust add vissza, csak gondolom dob egy csinos UnsupportedOperationException-t ha add-ot hívsz az outputra.
-
BE4GLE
senior tag
LOL. Olyan rég Kotlin-ra váltottam, hogy már el is felejtettem, hogy a list is definiálja az add metódust. Akkor ha jól rémlik talán az Iterable a jó analógia rá.
-
BE4GLE
senior tag
Volt már hasonló kérdésem saját osztállyal. (ősosztály metódus elérés, override)
Azt még mindig nem értem, hogy beépített osztályoknál mi a különbség a list1-list2 között, ha az egyiket List-be a másikat ArrayList típusba teszem. (ez a kérdés akár a Map/HahMap -re vonatkozhatna)
List<String> list1 = new ArrayList<String>();ArrayList<String> list2 = new ArrayList<String>();Annyit tennék, még hozzá, hogy az ArrayList mutable. A projektekben az ilyen típusú visszatérési értékek kerülendők. A HashMap is ilyen. Ezeket inkább csak függvények és osztályok belső logikájához használd. Visszatérési értéknek mindig próbálj immutable-t használni, mint a List vagy a Map. Azt gondolom észrevetted, hogy az interface típusokban nincs add és put. Okkal.
-
BE4GLE
senior tag
Metódus-referenciát akartam írni, de elbabráltam.
Ha a Literacy osztályban implementálsz egy static compare metódust a Double::compare mintájára (ahogy a lambdában csináltad), akkor úgy is lehetne a streames kód, hogy:.sorted(Literacy::compare)Rövidebb nem lesz összességében, de elegánsabb, és nálam egy kód reviewn is hamarabb átmegy

Hát igazából, ha már ott implementálja, akkor simán override-olhatja a compareTo metódust, és akkor üresen is hívhatja a sorted() függvényt.
-
BE4GLE
senior tag
-
BE4GLE
senior tag
Elakadtam a következő stream soron:
ArrayList<Literacy> list = new ArrayList<>();try {Scanner scanner = new Scanner(Paths.get("literacy.csv"));while (scanner.hasNextLine()) {String[] line = scanner.nextLine().trim().split(",");list.add(new Literacy(line[0],line[1],line[2],line[3],Integer.valueOf(line[4]),Double.valueOf(line[5])));}} catch (IOException ex) {System.out.println(ex);}list.stream().sorted((p1, p2) -> {return p1.getLiteracyRate() - p2.getLiteracyRate();}).forEach(l -> System.out.println(l));
A fordítási hibaüzenet: incompatible types: bad return type in lambda expression
possible lossy conversion from double to int
ALiteracyosztályban agetLiteracyRatedouble típus.Nem értem mi a baja két double kivonásával és visszaadásával? (int-el működne, de nem az a feladat)
Egy kis magyarázat: A comparator mindig int visszatérési értékű. Az érték előjele mutatja meg, hogy merre néz a kacsacsőr. Ha nem primívet használsz, akkor az object rendelkezik egy compareTo metódussal aminek int a visszatérési értéke. Szóval ha double helyett Double lenne a property, akkor hívhatnád így is. p1.compareTo(p2). Vagy ha ez az egyetlen property akkor akár comparator nélkül is mehet: sorted()
-
BE4GLE
senior tag
Elakadtam a következő stream soron:
ArrayList<Literacy> list = new ArrayList<>();try {Scanner scanner = new Scanner(Paths.get("literacy.csv"));while (scanner.hasNextLine()) {String[] line = scanner.nextLine().trim().split(",");list.add(new Literacy(line[0],line[1],line[2],line[3],Integer.valueOf(line[4]),Double.valueOf(line[5])));}} catch (IOException ex) {System.out.println(ex);}list.stream().sorted((p1, p2) -> {return p1.getLiteracyRate() - p2.getLiteracyRate();}).forEach(l -> System.out.println(l));
A fordítási hibaüzenet: incompatible types: bad return type in lambda expression
possible lossy conversion from double to int
ALiteracyosztályban agetLiteracyRatedouble típus.Nem értem mi a baja két double kivonásával és visszaadásával? (int-el működne, de nem az a feladat)
p1.getLiteracyRate() - p2.getLiteracyRate()
Ehelyett írd ezt: Double.compare(p1, p2) -
BE4GLE
senior tag
Vagy csak olyanok kozott dolgozom akik a problemat oldjak meg a szoftver letrehozasaval es az implementacio helyesseget tesztelik megfelelo szintu tesztekkel utat helyesebbnek tartjak.
Tesztet irni TDD-hez DE ugy, hogy az tenyleg minden lehetseges implementacio eseten minden hibat elkap, akkora befektetes, hogy annyi ido alatt az _egyik_ implementaciot tesztelessel egyutt egy-harom masik problemara is megcsinalja [JOL]. Teljes tesztet elore megirni ugy, hogy egy lehetseges implementacio mar a fejeben van, az meg a menet kozben kiderulo donteseknel csinal lyukat [aztan vagy betomik vagy nem... talan ahol merge feltetelbe fut].
Egy esetben jo lehet: az "agy" irja a teszteket, a code monkey-k/juniorok/etc. meg az implementaciot. De akkor sem biztos hogy kicsit is hosszabb tavra nezve.
[Termeszetesen az elozoleg irt kiveteleket fenntartva, altalanosabb meretu/beagyazottsagu/bonyolultsagu fejlesztesi feladatokra.] Es persze SZVSZ.Nem értem mi igényel ebben olyan sok időt.
Az én tesztjeim nem szoktak olyan robosztus kódok lenni. Hiszen csak pár mock adat, fake hívás, és assert az egész. Viszont a teszt nélküli legacy kódok javítására borzalmasan sok idő megy el. A menet közben kiderülő döntések pedig mindenképpen megkavarják a dolgokat. Ez nem érv a TDD-vel szemben. -
BE4GLE
senior tag
Ha ez a kérdés fölmerült benned az számomra azt sugallja, hogy nagyon nem tudod mire való egy unit teszt. Vagy csak trollkodsz.
Az ilyen tesztekben az interface-eket mock-olod. A user interface-t is. Nem célja ezeknek a teszeknek ellenőrizni, hogy a layout-ot helyesen raktad e össze, és hogy a szöveged jól legyen tördelve. Viszont a Hello World-ig vezető utat le tudod tesztelni és a kimenetet is. -
BE4GLE
senior tag
Túl cinikus vagyok a TDD-hez

Az utóbbi években csak olyan agilis projektekben dolgoztam, ahol az agilitás leginkább arra vonatkozott, hogy menetközben találja ki a megrendelő, hogy mit is akar (vagy nem). A projektek óriási keretrendszereket használnak, amiben az egyes funkciók deklaratív elemeken keresztül automatikusan készülnek el. Ritka volt az, amikor nem változott hétről hétre a követelmény, és nagyon kevés része volt a kódnak az, amiben unit tesztre érdemes dolgok történtek.
Ha ilyen projektekre valaki rávág egy coverage kritériumot, mert az jól mutat, a teljes csapat egy emberként áll fel, és megy át a konkurenciához.
De hello ${username} példakódban piszkosul jól mutat...Amit leírtál az távolról sem agilis fejlesztés. A rossz menedzsment mindig rányomja a bélyegét a projektminőségre. Ez nem a TDD hibája.
-
BE4GLE
senior tag
Nálunk se jutnál keresztül a felvételi folyamaton enélkül. És nem tudom miről beszélsz. Én sosem bántam meg. Az olyan kódokkal viszont nagyon nehéz dolgozni, amik teszt nélkül össze lettek gányolva. Már csak azért is, mert az ilyen kódok jellemzően később se teszteletőek. Egészen máshogy írsz meg valamit, ha a tesztelhetőség és karbantarthatóság is szempont, és nem csak az, hogy minél előbb legyen egy látszólag működő funkciód.
-
BE4GLE
senior tag
Sok cég projektjébe be se lehet mergelni olyan kódot, ami nincs letesztelve. Szóval jobb ha megbarátkozol velük, és úgy általában a TDD-vel, mert ha csak nem valami kontár projekten dolgozol, akkor legalább egy code coverage ellenőrzés le fog futni a projekten.
-
BE4GLE
senior tag
-
BE4GLE
senior tag
remélem nagyon kezdő kérdések is elférnek itt
Elkezdtem a MOOC.fi Java programozás kurzust és az egyik feladatnál elakadtam.
Illetve a feladatot magát meg tudtam oldani, az ellenőrzés mégis hibaüzenetet dob rá.
Ez lenne a kód:import java.util.Scanner;
public class InAHoleInTheGround {
public static void main(String[] args) {
printText();
}
public static void printText() {
Scanner scanner = new Scanner(System.in);
System.out.println("Give numbers:");
int sum = 0;
int count = 0;
int even = 0;
int odd = 0;
while (true) {
int number = Integer.valueOf(scanner.nextLine());
if (number == -1) {
break;
}
sum += number;
count++;
if (number % 2 == 0) {
even++;
} else {
odd++;
}
}
System.out.println("Thx! Bye!");
if (count != 0 && sum != 0) {
System.out.println("Sum: " + sum);
System.out.println("Numbers: " + count);
System.out.println("Average: " + 1.0 * sum / count);
System.out.println("Even: " + even);
System.out.println("Odd: " + odd);
}
}
}Tudnátok segíteni, mi lehet a gond?
Én a kilépő ágat try-catch blokban csináltam volna. Lekezelve a
NumberFormatExceptionkivételt. Az azif (number == -1)nem tudom mitől véd egész pontosan.
Új hozzászólás Aktív témák
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Debian GNU/Linux
- Nem kell még temetni: 2 éves órajelcsúcsot döntöttek meg Raptor Lake-kel
- Kamionok, fuvarozás, logisztika topik
- AMD vs. INTEL vs. NVIDIA
- Napokon belül váratlan versenyzővel bővül a VGA-piac
- Analóg fényképezés
- Háztartási gépek
- Projektor topic
- Kormányok / autós szimulátorok topikja
- Linux kezdőknek
- További aktív témák...
- Garanciális samsung galaxy watch 8 classic
- Samsung QVO 870 SSD (1 TB) 100/100%
- Új, bontatlan - Apple MacBook Air 13 M4 16/256GB - Sky Blue
- Új Dobozos ASUS VivoBook Go 15 Laptop 15,6" -20% Ryzen 5 7520U 16/512 Radeon Graphics FHD OLED
- Új HP ZBook Firefly 16 G10 Profi Tervező Vágó Laptop -50% i7-1355U 16/1TB FHD+ RTX A500 4GB
- HP X360 11 G7- Intel N6000/8GB RAM/ 11.6" HD érintőkijelző, passzív hűtés - garanciával
- 27% - GAMING PC! i5-12400F / RTX 4060 / 16GB DDR5 / 1TB NVMe / B760 / 650w! BeszámítOK
- Apple AirPods Max 2 USB-C Bontatlan Fekete & Csillagfény / 27% áfás ár
- iPhone 13 Pro 256GB Silver -2 ÉV GARANCIA - Kártyafüggetlen, MS5603, 100% AKKSI
- Eladó Samsung Galaxy A12 4/64GB fekete / 12 hónap jótállás
Állásajánlatok
Cég: aiMotive Kft.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest



Szívesen!




