- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - 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 Nyomtatók, szkennerek Tabletek, E-bookok 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ésFÁ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
-
Aethelstone
addikt
Többalakúság.
Problémák:
Ha szeretnéd kicserélni mondjuk egy LinkedList-re az ArrayListet, akkor nem tudod megtenni, mivel az eredeti változód típusa explicit ArrayList. Ha biztosan tudod, hogy az a változó az idők végezetéig ArrayList marad (ezt nem tudhatod), akkor maradhatna.
Másrészt meg nem szép. Kódolási konvenció a Collectionok esetében, hogy nem implementációt, hanem interfészt adunk meg ilyen esetben.
Érdemes "megszeretni" az interface típusú deklarációt, mivel egy csomó framework is így műx, pl. a Spring-es dependency injection esetében is interészekeket injektálsz, nem implementációkat.
Teljesítménygondok nem hiszem, hogy lennének.
szerk: Kolléga megelőzött

-
F1rstK1nq
aktív tag
Így megmarad az az előnyöd, hogy csak a Lista implementációját változtatod meg példányosításkor, a kód többi része változatlan marad. (Például ha úgy döntesz, ArrayList helyett LinkedList-et használsz később)
Clean Code szerint egyébként érdemes szinte minden esetben a referencia értéknek a még legmagasabb értelmes interfészt megadni.
-
Aethelstone
addikt
-
Aethelstone
addikt
-
floatr
veterán
Létezik az, hogy a VM memóriát pucol, betölt, lefordít, becache-el dolgokat, de az elméletileg első futtatáskor megtörténik. Ez a jelenség más infrastruktúrán is jelentkezik.
Azt viszont a teljesítményteszteknél érdemes megjegyezni, hogy mindig lesznek kiugróan rossz, vagy jó eredmények, ami nem igazán tükrözi a normál körülményeket. Használnak emiatt sokféle statisztikai mutatót, de nekem eddig a legjobban a medián jött be, az egyszerű átlagolás könnyen elvisz a málnásba.
Ja és természetesen lehetőleg kellően sok futtatás kell ahhoz, hogy valós képet kapjál. Ha az elsőt mondjuk eldobod, után mondjuk 10 mérés már sok esetben elég tud lenni.
-
Sk8erPeter
nagyúr
Szerintem egyáltalán nem csúnya, hogy külön sorba rakod, hogy mit művelsz azzal a listával, amit majd be szeretnél rakni a HashMapbe. Sőt, gyorsan olvasható, egyértelmű, tiszta, és elkerülsz vele egy tök felesleges plusz metódushívást. A második is jól olvasható, de tény, hogy pazarlóbb. Így egy elemnél aztán tényleg totál mindegy teljesítmény szempontjából, meg láthatóság szempontjából is, de én meg attól kaparom az arcom, amikor olyan kódot kell olvasnom, amikor láthatóan a fejlesztő célja az volt, hogy vagányan mindent minél rövidebbre tömörítsen. Az sem számít, hogy hányszor ismétel azonos metódushívásokat, hány plusz műveletet igényel, de milyen jól mutat, hogy legalább tömör. Hát nem, nem lesz feltétlenül gyorsabban olvasható a kód (persze nyilván bőven vannak kivételek, de ne fossuk már le ennyire a teljesítményt). Tényleg valakinek attól lesz olvashatatlan a kód, mert külön sorban ki van fejtve, hogy mi történik? Az már régen rossz. Magasszintű nyelveknél egyébként nagyon divat(tá vált?) az is, hogy a metódushívásokat egymás után is ismételgetjük, mondván, "nem kell túlpörögni optimalizáció szempontjából", mint a kolléga mondta, ez itt abszolút igaz, de általában ezzel nagyon nem értek egyet. Egyrészt ha ennyire leszarjuk, hányszor történik meg egy-egy metódushívás, akkor az már zsigeri szintű igénytelenséghez vezethet hosszabb távon a teljesítmény rovására, meg azért szépen lehet halmozgatni az ilyen tök felesleges overheadeket, na de minek. (Persze ebben az is szerepet játszik, hogy ebből a szempontból mai napig bennem van a C, C++ tanulásának korszaka, amikor az ilyesmi nem volt menő.)
Pl. ilyesmi:
whatever.doStuff().veryCool().blahblah();
whatever.doStuff().veryCool().wow().great();
whatever.doStuff().veryCool().notCool();
Na itt pl. a whatever.doStuff().veryCool() eredményét el lehetett volna tárolni egy változóba. De nem, ez így tök menő. Ja várjunk csak, mégsem.
Szerk.:
Persze simán lehet, hogy az ilyeneket a fordító úgyis optimalizálja.
Mindegy, bennem az van, hogy abból baj nincs, ha egyértelműen láthatóvá teszem, mi történik, nekem a pár sorral bővebben hablatyolós kód nem lesz olvashatatlanabb, az agyontömörített kód viszont annál inkább. (Meg a debuggolást is nehezebbé teheti.
) -
PazsitZ
addikt
Az első esetnél egy temp referencia van, a második esetnél van a Map get és egy cast művelet.
Nem hiszem, hogy ilyeneket szintű dolgokat kellene túlpörögni optimalizáció szempontból.Ha nagyon rövidíteni akarsz, ezek is használhatóak:
objects.put(actualKeyObject, new ArrayList<Object>() {{ add(actualValueObject); }});
objects.put(actualKeyObject, Arrays.asList(actualValueObject));Egyébként inkább abba az irányba gondolkodnék, hogy ha több elemet pakolunk a listába, akkor azt külön metódusba kiszervezni és az első példa szerint hozzáadni érdemesebb/átláthatóbb szerintem.
Egy elemű lista esetén viszont számomra inkább az inline megoldások a szimpatikusabbak.
-
#39560925
törölt tag
-
M_AND_Ms
veterán
-
Mukorka
addikt
-
Sk8erPeter
nagyúr
Konkrétabban mit takar a "felokosítás"?
(#7528) sutszi:
Jaja, két számjegy viszont simán elfér a tálcaikonon (ld. HWiNFO64 tálcára kirakott kijelzői). Három már elég necces (a töltöttség kijelzésénél mondjuk csak egy esetben van erre szükség, 100%-nál
)... Igazából két számjegy esetén állapotjelzésre a tálcaikon a legjobb megoldás, háromnál para. De próbát megér, max. kisebbek lesznek a betűk, vagy 100% esetén egy teljes töltöttséget jelző egyéb ikont mutatsz, nem számot. 
-
Superhun
addikt
-
Karma
félisten
-
Karma
félisten
Ilyen megoldásoknak szerintem nincs helye egy Java topikban. De igazából semmilyen szakmaiban se. Stringben eltárolni a számot? Nooormális?
Ha nem akarsz saját adatosztályt írni, akkor legalább a AbstractMap.SimpleEntryt használd az adatpár tárolására. Ezt meg belerakhatod a HashSetbe.
-
TBG
senior tag
Superhun megoldása teljesen jó.
Viszont ha már saját osztályt használsz felüldefiniált metódusokkal, akkor szerintem elég az equals felüldefiniálni úgy, hogy a String és az int egyezőség esetén adjon vissza TRUE-t és akkor egy "sima" ArrayList-be is teheted. Persze attól is függ, hogy mennyi elemed lesz, mert nagyon sok elem esetén az ArrayList nem túl gazdaságos. Nem mondom, hogy Superhun vagy az én megoldásom a jobb, az enyém egy alternatív, de valamivel egyszerűbb megoldás, mert csak 1 metódus felüldefiniálását kell megcsinálni, de mint írtam, sok elemnél nem feltétlenül gazdaságos.
-
Superhun
addikt
-
Karma
félisten
Ez egy fontos tervezési elv kicsiben. Amikor a változót később használod, nem függ így a kódod attól, hogy a változó konkrétan egy HashMapet takar, csak hogy megfelel a Map interfésznek - más szóval kulcs-érték párokat tudsz tárolni benne.
Így a későbbi kód módosítása nélkül kicserélheted például TreeMapre (ami hashtábla helyett piros-fekete fában tárolja az értékeket), ha a helyzet úgy kívánja. Vagy akár egy tömbre, amiben lineáris kereséssel túrod ki a megfelelő értéket. A lényeg az, hogy milyen szolgáltatást nyújt, nem az, hogy konkrétan hogyan oldja meg.
Azért mondom, hogy kicsiben, mert egy függvényen belül ennek nincs nagy jelentősége, maximum szoktatod magad csak az interfészek deklarálásához. Nagyobb programban viszont, ahol komponensek kapcsolódnak egymáshoz, ez már kritikussá válik. És jönnek olyan finomságok, mint Dependency Inversion.
-
Superhun
addikt
-
fatal`
titán
-
TBG
senior tag
-
TBG
senior tag
-
TBG
senior tag
-
WonderCSabo
félisten
-
WonderCSabo
félisten
-
modder
aktív tag
Nem vagyok egy nagy XML vadállat, csak mostanában kellett. Attól függ, hogy akarod használni.
ha entitást akarsz generálni az xml-ből oda-vissza, akkor JAXB (Metro, de inkább Eclipse Moxy implementációt használd, mert kevésbé bugos).
Ezt nagyon egyszerű használni.Ha több kontroll kell, akkor pl StAX API.
Én most a kettőt együtt használtam, mert alá kellett írni az eredeti xml üzenetet, ami sokféle típusú lehet. szóval fogtam, jaxb-vel legenerelátam az üzenet xml-t, szintén jaxb-vel legeneráltam a signature objektumból az xml-t, majd StAX-szal a kettőből összeheggesztettem egy nagyon egyszerű xml-t, ami a kettőt tartalmazza.
-
Scroll Lock
tag
-
Superhun
addikt
A legnagyobb programozási fórum a StackOverflow, én mindenképpen próbálkoznék ott is.

-
Superhun
addikt
-
Taoharcos
aktív tag
-
Peter Kiss
őstag
Van egy abstract osztályod, benne dolgokkal. Két év múlva kiderül, hogy jó lenne, ha lenne benne plusz egy metódus. Simán lehet módosítani az osztályt anélkül, hogy a régi kódokat elrontanád vele.
Interface esetén ezt nem lehet kivitelezni: ha bekerül az interface-be egy plusz elem, akkor azt a régi kódokban is implementálni kell. (Abstract osztály esetén lehet pl. az adott új metódusnak üres blokkja vagy egy default implementációja (pl. return null; ).)
-
fatal`
titán
"Mi még köztük a különbség? Melyiket érdemes használni?"
Származtatáskor van különbség. Ha nincs szükséged semmilyen függvény implementációjára (értsd, olyan abstract osztályod lenne, amiben csak abstract függvények vannak), akkor érdemes interfacet használni, mert interfaceből egy osztály bármennyit implementálhat, viszont származtatni csak egy osztályból lehet. -
Peter Kiss
őstag
-
TBG
senior tag
Az interfész osztály és az absztrakt osztály közötti különbségek.
E kettő dolog között a különbség "szinte" csak az abstract és az interface kulcsszavak.
Mi még köztük a különbség? Melyiket érdemes használni?Azért ez nem így van. Az interfész gyakorlatilag csak meghatároz megvalósítandó metódusokat.
Ezzel szemben az absztrakt osztályban lehetnek absztrakt metódusok, amiket meg kell valósítani az örökösnek, DE lehetnek benne nem absztrakt metódusok is, amik valami konkrétumot csinálnak.Persze ezt lehet variálni, amikor egy absztrakt osztály megvalósít egy interfészt, de az implementációk absztraktok lesznek.....így azokat az örökösben kell implementálni...és ott már gyakorlatilag nem látszik, hogy az eredetileg az absztrakt osztály absztrakt metódusait valósítom meg vagy az absztrakt osztály által implementált interfész metódusait

És melyiket érdemes? Erre nincs egységes recept. Általánosságban elmondható, hogy ha többszörös öröklődést akarsz megvalósítani(ami Javában alapból nincs), akkor interfész, de ha tuti, hogy csak egy őst akarsz, de kellenek default metódusok is, akkor absztrakt. Perszem azt is lehet, hogy
Interface-->default class implements interface-->örökös
vagy
absztrakt class-->örökös
vagy
Interface->absztrakt class absztrakt metódusok-->örökös
szóval...a lehetőségek végtelen tárháza

-
MrSealRD
veterán
-
Karma
félisten
A TC Jad Plugin a kedvencem.
Új hozzászólás Aktív témák
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - 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 Nyomtatók, szkennerek Tabletek, E-bookok 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ésFÁ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?:))
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- A Capcom szerint a Pragmata még csak a kezdet lehet
- Gaming notebook topik
- Anglia - élmények, tapasztalatok
- Xbox Series X|S
- Amazon
- Megújult mobilos felület, fórumos ráncfelvarrás a PROHARDVER! lapcsaládon
- Debrecen és környéke adok-veszek-beszélgetek
- Kerékpárosok, bringások ide!
- Mesterséges intelligencia topik
- További aktív témák...
- PowerColor Radeon RX 7900 XTX RED DEVIL OC 24GB - Garancia - BESZÁMÍTOK!
- Új, Gamer félgép - GIGABYTE B650 EAGLE AX + Ryzen 7 7800X3D + Corsair 2x16GB DDR5 6200MHz
- Bomba ár! HP EliteBook 850 G5 - i7-8GEN I 16GB I 512SSD I 15,6" FHD I Cam I W11 I Garancia!
- Bomba ár! Fujitsu LifeBook E780 - i7-640M I 8GB I 160GB I Nvidia I 15,6" HD+ I Cam I W10 I Garancia!
- Bomba ár! HP EliteBook 2540P - i7-640LM I 4GB I 160GB I DVDRW I 12,1" WXGA I Cam I Garancia!
- ÚJ Lenovo LOQ Intel Core i7-13650HX, 32GB, 1TB, RTX 5060(8GB), FHD 144Hz
- Xbox One S Minecraft Edition 1 TB + kontroller 6 hó garancia, számlával!
- Dyson Purifier Humidify+Cool PH2 De-NOx (White/Gold)
- BESZÁMÍTÁS! nVidia RTX 3090 24GB Founders Edition videokártya garanciával hibátlan működéssel
- GYÖNYÖRŰ iPhone 13 128GB Starlight -2 ÉV GARANCIA - Kártyafüggetlen, MS5203
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

Mindegy, bennem az van, hogy abból baj nincs, ha egyértelműen láthatóvá teszem, mi történik, nekem a pár sorral bővebben hablatyolós kód nem lesz olvashatatlanabb, az agyontömörített kód viszont annál inkább. (Meg a debuggolást is nehezebbé teheti.




