- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- Tomasz72: Ventilátor upgrade
- sziku69: Szólánc.
- Brogyi: CTEK akkumulátor töltő és másolatai
- MasterDeeJay: H110-es lapban 10.gen Comet Lake működhet?
- eBay-es kütyük kis pénzért
- Parci: Milyen mosógépet vegyek?
- Mr. Y: Motoros sztorik #06
Új hozzászólás Aktív témák
-
thon73
tag
válasz
Ursache #6991 üzenetére
Ööö. Ilyesmi csak két nagyságrenddel egyszerűbben.
Az egyik kollégám mondta, hogy Javaban nem programozni kell, csak tudni, hogy hol írták már meg...
Ebben van valami igazság.Nekem két funkció is kellett - "human readable" adatokkal feltöltse az adatstrutúrát (ilyen már van pl. xml), - de (2.) feltöltés közben egyfajta "előkészítő" adatfeldolgozást is végezzen; ha a forrás azt indokolja. Ez utóbbit nem lehet valószínűleg saját kód hozzápasszintása nélkül megoldani...
((A valóságban meg egy hevenyészett (sőt tákolt) tesztkód adta meg az alapötletet, ami átgyúrás után rövid, tömör és tetszetős lett. Bár valaki már biztos ezt is megírta...))Köszönöm a fenti linket, már elkezdtem elmélyedni benne
-
thon73
tag
válasz
Aethelstone #6988 üzenetére
Konkrétan, használom, azért kellett felfedeznem
Egy speciális szöveget (egyfajta programnyelvet) szeretne feldolgozni a program. A beolvasás minden adat-elemnél közel azonos, csak éppen pl. a String String-ként, a numerikus érték Long-ként érkezik. Az érkező adatelemekről egyébként elég sok mindent tudok, pl. azt is, hogy a numerikusak milyen pontosságúak kell legyenek. Nem csupán java értelemben, hanem pl. ha egy szín jön, az unsigned 32 bittel írható le (ami egyébként belefér egy signed int-be).
Az eredeti megvalósítás ellenőrizte a pontosságot, aztán visszaadott egy - a kívánt pontosságnak megfelelő - Long értéket. Csakhogy, egyszerűbb ha pl. pont a szineknél kapásból egy Integer pontosságú értéket ad vissza, mert akkor nem kell tovább bonyolítani a dolgot az adatot tároló változók szintjén.
Egyébként az egész teljesen prímán működött, amíg a különböző típusokat különböző metódusok szedték elő. Viszont egy közös Object-tel egyetlen átlátható metódusra egyszerűsödött az egész - éppen csak ide-oda kellett volna konvertálnom az adatokat. Na, ez nem ment. Utána meg már az érdeklődés is hajtott.
Bocs, ez kicsit leegyszerűsítette a problémát, de remélem, érthető maradt.
(Mivel nem vagyok profi programozó, azt sem igazán tudtam, hogy mire keressek a googliban. Végül aztán sikerült megtalálni.)
-
thon73
tag
Bocsánat, hogy magamnak válaszolok, de időközben végül egy próbaprogrammal megfejtettem:
Object longobject = 0x0102030405060708L;
long longprimitive = (long)longobject;
// char charprimitive = (char)longobject; -> exception
// int intprimitive = (int)longobject; -> exception
char charprimitive = (char)(long)longobject;
int intprimitive = (int)(long)longobject;
// Character charobject = (Character)longobject; -> exception
// Integer intobject = (Integer)longobject; -> exception
Character charobject = Character.valueOf( (char)((Long)longobject).longValue() );
// (char)(long)longobject;
Integer intobject = (int)(long)longobject;Végülis logikus: a wrapper osztályok (szinte) kizárólag a saját primitivjükkel átjárhatóak (boxing). És csak a primitivek alakíthatóak egymásba (casting), a nem öröklési viszonyban álló objectek nem. (Bár a Long-Object átalakítás szintén casting, ha mindent jól értettem.)
Gondolom, ez itt sokaknak nagyon alap szint; de én azért jól megszenvedtem vele, mire kiolvastam a tudományból, hogy pontosan mi is kell ide meg hogyan működik...
-
thon73
tag
A Long Object "lebutítását" csak így tudtam megoldani:
Object result = getLongValue();
result = (long) result & (long) Character.MAX_VALUE;Működni működik, csak nem tűnik túl szépnek.
Viszont egy lépéssel később megint elakadtam. A "lebutított" értéket át is szeretném pakolni egy másik wrapper osztályba. ((Egy univerzális feldolgozó Object-ként kapja meg az értékeket ((Long a numerikus és String a Stringek számára), és különböző átalakítások, ellenőrzések után ezt kellene visszaadnia, csak éppen a kívánt méretnek megfelelő wrapper osztályba helyezve. Pl. Objekctként numerikus Long érték -> Objectként numerikus Character érték.))
Hogyan tudok egy Objectet, ami bizonyosan egy Long értéket tartalmaz, a lehető legegyszerűbben egy olyan Object-té alakítani, ami Character-t tartalmaz? ((A fordító vagy feleslegesnek látja a próbálkozásaimat, vagy hibaüzenetekkel bombáz.))
-
thon73
tag
válasz
WonderCSabo #6940 üzenetére
Közben eddig jutottam:
Object result = null;
...
result = getPrimitiveLong(); // long visszatérési érték
// másutt
result = getLong(); // Long visszatérési érték
...
result = (long)result & 0xFFFFFFFFL;Ha itt (Long)-ot írok a (long) helyett, az hülyeség? Aritmetikai műveletet csak primitivek csinálnak? És ezt: &=, gondolom, felejtsem el.
Egyébként a fenti jó.Amikor viszont ezt írom:
result = (long)result & Character.MAX_VALUE;
Akkor azt mondja, hogy "Reports pointless bitwise expressions..."
Ez miért van? Nem long-ra alakít mindent, ha az egyik long??Bocs, hogy ennyit kérdezek, de wrapper osztályt idáig tényleg csak wrapper-ként használtam, és nem dolgoztam vele.
-
thon73
tag
Sziasztok!
Elakadtam egy arithmetikai problémával:
Egy érték egyaránt lehet String vagy különböző pontosságú numerikus érték, ezért Object-ként tárolom. (A program egyébként tudja, hogy melyik van benne.)
Tegyük fel, hogy egy long pontosságú szám van benne, amit szeretnék char pontosságúra korlátozni. (Csak az alsó bitek érdekesek.)
Primitív típussal ezt tenném:
value &= Character.MAX_VALUE;
De hogyan tudom ezt egy wrapper-rel elérni, pláne úgy, hogy Object-ként van definiálva eredetileg?
((Az autoboxingnál azt olvastam, hogy lehet ilyet, de nem sikerült.))
Köszönöm!
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- BESZÁMÍTÁS! ASRock Z370 i5 8500 16GB DDR4 512GB SSD 2060 Super 8GB Zalman Z9 Plus Enermax 750W
- AKCIÓ - 122 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 7 7745HX, RTX 4070 (48 hónap garancia!)
- Új Apple iPhone 16e 128GB, Kártyafüggetlen, 3 Év Garanciával
- BESZÁMÍTÁS! MSI Z77 MPOWER Z77 chipset alaplap garanciával hibátlan működéssel
- Készpénzes számítógép PC félkonfig alkatrész hardver felvásárlás személyesen / postával korrekt áron
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest