Hirdetés
- Google Pixel topik
- Samsung Galaxy A54 - türelemjáték
- Bemutatkozott a Poco X7 és X7 Pro
- Motorola Edge 70 - többért kevesebbet
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Fotók, videók mobillal
- Xiaomi 15T - reakció nélkül nincs egyensúly
- Xiaomi 14T Pro - teljes a család?
- Xiaomi 15T Pro - a téma nincs lezárva
- Poco F7 – bajnokesélyes
Ú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
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- World of Tanks - MMO
- Google Pixel topik
- 5.1, 7.1 és gamer fejhallgatók
- Samsung Galaxy A54 - türelemjáték
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Kínai és egyéb olcsó órák topikja
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- Milyen monitort vegyek?
- World of Warships
- Bemutatkozott a Poco X7 és X7 Pro
- További aktív témák...
- Asus ROG Ally Z1 Extreme 2026 októberig Alza garis számlás kézi konzol handheld PC gaming gamer
- Lenovo Y520 I5 7300HQ GTX 1050 TI 16gb ram 256/1Tb
- XPS 9320 27% 13.4" 3.5K OLED érintő i7-1260P 32GB 1TB NVMe ujjolv IR kam gar
- Latitude 7430 27% 14" FHD IPS i7-1265U 16GB 512GB NVMe magyar vbill IR kam gar
- Huawei Watch 5 42mm Sand Gold
- Xiaomi Redmi 13 4G 256GB, Kártyafüggetlen, 1 Év Garanciával
- ÚJ Parkside 10000 mAh powerbank 3 év garanciával.
- Airmsen YW500 ablaktisztító robot / 12 hó jótállás
- Xiaomi Redmi Note 14 Pro+ / 8/256GB / Kártyafüggetlen / 12Hó Garancia
- iPhone 14 Pro Max 256GB Space Black -1 ÉV GARANCIA -Kártyafüggetlen, 100% Akkumulátor
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest




)


