- Októberi bevetésre indul a hardveralakulat
- Továbbfejlesztette az SP szériás, kompakt tápegységeit a Lian Li
- Itt van az ASUS legfrissebb, AMD platformra épülő mini PC-je
- Jegeli pénznyelő projektjét az Apple, az okosszemüvegben látják a jövőt
- Olcsónak ígérkező, madzagos egér jelent meg az ASUS ROG-os portfóliójában
- Milyen belső merevlemezt vegyek?
- Milyen billentyűzetet vegyek?
- Nem indul és mi a baja a gépemnek topik
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Milyen alaplapot vegyek?
- Itt van az ASUS legfrissebb, AMD platformra épülő mini PC-je
- SSD kibeszélő
- Intel Core Ultra 3, Core Ultra 5, Ultra 7, Ultra 9 "Arrow Lake" LGA 1851
- Raspberry Pi
Új hozzászólás Aktív témák
-
floatr
veterán
válasz
Dave-11 #8193 üzenetére
A getClass() egy metódus, amit akkor tudsz használni, ha van egy példányod futás időben. Pl előszedsz valahonnét egy ismeretlen típusú objektumot, és meghívod ezt a metódust, akkor a runtime viszaadja a típusához kapcsolt metaadatokat. A .class egy operátor, és a fordító fogja feloldani a dolgot
Egy szemléletes példa:
...
Object o = cacheMap.get(id);
if (o != null && o.getClass().equals(User.class)) {
User u = (User) o;
...
} -
-
F1rstK1nq
aktív tag
válasz
Dave-11 #8191 üzenetére
Ez a klasszikus megoldás:
String fileName = "res01.res";
ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource(fileName);
if (resource != null) {
File file = new File(resource.getFile());
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}Viszont, ha érdekel más módszer is, itt még tudsz csemegézni Java8-as megoldások közül is. Viszont amit ezekben a megoldásokban nem látsz, hogy hogyan éred el a resources alatti fájlokat. Így:
ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource(fileName); -
Szmeby
tag
válasz
Dave-11 #5784 üzenetére
Ha biztosra akarsz menni, akkor a default package-be teszed.
Ami ugye azt jelenti, hogy az osztály a classpath gyökerébe kerül, és elhagyod az osztály első sorában a package sort.
Habár szerintem is a sereg csomagon kívüliségre gondolt, de furán fogalmaz, az biztos. Ha úgy érzed valami speciális illene ide, akkor csak a default package marad. Ki tudja, lehet, hogy előadáson így nevezte a default package-et. Ha így lenne, de te nem így csináltad, akkor viszont mehetsz reklamálni, mert azt nem úgy hívják és különben is odaírhatta volna, hogy pontosan mire gondol. -
Szmeby
tag
válasz
Dave-11 #5773 üzenetére
Az osztályokat csomagokba rendezzük, arról gondolom már volt szó. Bizonyára valamilyen csomagban lévő osztályról beszél (pl.: com.dave.proba.MyClass), és most az idézeted egy az adott csomagon kívül eső osztályra tér rá (pl.: com.dave.MyOtherClass).
Egy osztályt futtathatónak nevezhetünk, ha van pl. main metódusa. De a "futtatható" szó akár a Runnable interfészre is vonatkozhat, ami a szálkezelésnél jön elő, és teljesen mást takar.
Amúgy nem tudom, ennyi információból nem lehet megmondani, max találgatni.
Szerintem ne várj érdemi választ egy kontextusból kiragadott mondatra, akarom mondani 4 szóra.Valószínűleg többre mennél a könyv eredeti (angol nyelvű) változatával. Bár nem olvastam még, de sajnos az a tapasztalat, hogy előszeretettel fordítanak le MINDENT (igen, a keyword-öket is) elcseszett magyar kifejezésekre, így totálisan érthetetlenné téve a szöveget. Persze az is lehet, hogy csak nekem tűnik érthetetlennek, mert én az angol neveken szocializálódtam. Sose hívnám az interfészt pl. felületnek. És ez még a megbocsátható elfordítások közé tartozik. Borzasztó miket ki nem találnak.
-
válasz
Dave-11 #5766 üzenetére
A kérdés ennél kicsit bonyolultabb.
Itt érdemes megnézni a Private Members in a Superclass című részt.
Tehát az alosztály nem örökli az ősosztály privát tagjait. Azonban ha ezekhez a tagokhoz az ősosztályban írsz public vagy protected metódusokat akkor az alosztály ezáltal hozzáférést kap az ősosztály privát adattagjához...
Ezt egyébként gyakorlati úton is lehet bizonyítani.:
Ha a ClassA-t átírod az alábbi kódban a saját osztályaid nevére, akkor ez kiírja az adott osztály adattagjait. Ez a kód amúgy a stackoverflow-ról van. Van ott pár érdekes kérdés erről a témáról.
Szóval ha lefuttatod akkor látni fogod, hogy az ősosztályodra listázni fogja az adattagokat, de a belőle származó alosztály esetében nem fog megjelenni a listában az ősosztály private adattagjai.public static void main(String[] args) {
inspect(ClassA.class);
}
static <T> void inspect(Class<T> klazz) {
Field[] fields = klazz.getDeclaredFields();
System.out.printf("%d fields:%n", fields.length);
for (Field field : fields) {
System.out.printf("%s %s %s%n",
Modifier.toString(field.getModifiers()),
field.getType().getSimpleName(),
field.getName()
);
}
}De olvastam olyat is ahol azt írták, hogy inkább azt modjuk örökli, de nincs hozzáférése...
-
válasz
Dave-11 #5764 üzenetére
Az A osztályodban az adattag private, de a hozzá tartozó getter & setter public. Ezért azok bárhonnan láthatóak. Ez így van jól.
Ha csinálsz egy public adattagot az A osztályban akkor látni fogod, hogy B osztályban el tudod érni getter & setter nélkül... Ez mondjuk nem túl egészséges...de ha tovább olvasol majd meglátod.
A getter & setter lényege pont az, hogy ellenőrzött módon tudj az adattagokhoz hozzáférni...
-
-
modder
aktív tag
válasz
Dave-11 #3239 üzenetére
Ha már a könyvben szó esett arról, hogy "az osztály implementálja az x interfészt", akkor gyanítom, hogy egy valós példa is szerepel az interfész alkalmazására.
Többek között azért jó egy interfész, mert elrejti az osztály konkrét implementációját (fordítási időben).
Egy egyszerű példa a Swing ActionListener interfész amit arra használhatsz, hogy gui eseményekre (pl. gomb megnyomása) valamit reagáljon a programod.
A GUI komponens .addActionListener( ActionListener listener ) metódusának egy olyan objektumra van szüksége, aminek van actionPerformed( ActionEvent e ) metódusa. Tehát létrehoztak neki egy interfészt, amiben deklarálták ezt a metódust, ez lett az ActionListener interfész. Ezzel kényszerítik ki, hogy csak olyan objektumot adjál át ennek a metódusnak, aminek megvan a megfelelő actionPerformed( ActionEvent e ) metódusa.Vissza a fordítási időhöz: Látható, hogy a Swing készítőket nem érdekli, hogy miután lefordították a Swing library-t milyen ActionListener objektumokat fog létrehozni a fejlesztő, lehet azoknak az objektumoknak hatszáz másik metódusa is, és mindegy, hogy mit csinál. Ami a fontos, hogy a fejlesztő által létrehozott listener objektumoknak meglesz az elvárható tulajdonsága: lesz neki actionPerformed( ActionEvent e ) metódusa.
-
Davs
tag
válasz
Dave-11 #3239 üzenetére
Egy intefesz csak definialja a metodusok neveit. Ha az osztalyod implementalja az interfesz, akkor az osztalynak definialnia kell MINDEN metodust, ami az interfeszben volt. Ahogy az elottel szolo peldajaban is latod, a MyService interfeszben csak a metodusok neve van definialva. A MyServiceImpl osztaly implementalja a MyService interfeszt, ezert implementalnia kell a get/setSomething metodusokat.
Ez ez egesz iterfeszes dolog pl arra jo, hogy ellenorizni tudod, hogy egy osztaly implementalja-e az adott interfeszt, es ha igen, akkor biztosan tudod, hogy az osztaly tartalmazza az interfeszben definialt metodusokat stb.
-
TBG
senior tag
válasz
Dave-11 #3239 üzenetére
Pár szó akkor.
Interfész:
public interface MyService {
public void setSomething();
public String getSomething();
}
public class MyServiceImpl implements MyService {
@Override
public void setSomething(String something) {
// Do something...
}
@Override
public String getSomething() {
return "Some String";
}
public void setFoo(String foo) {
// Do anything else...
}
}
public class Something {
public static void main(String[] args) {
// Ebben az esetben csak azokat a metódusokat látod, amiket a MyService interfész deklarál....
MyService myService = new MyServiceImpl();
myService.setSomething("Hehe");
String something = myService.getSomething();
// Ebben az esetben látod az interfész által deklarált metódusokat és az egyebeket is.
MyServiceImpl myServiceImpl = new MyServiceImpl();
myServiceImpl.setSomething("Hehe");
String something = myServiceImpl.getSomething();
myServiceImpl.setFoo("Foo");
// Röviden...
}
}
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Milyen belső merevlemezt vegyek?
- Világ Ninjái és Kódfejtői, egyesüljetek!
- CMF Phone 1 - egy jó telefon
- Milyen billentyűzetet vegyek?
- Nem indul és mi a baja a gépemnek topik
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Vicces képek
- Apple iPhone 16 Pro - rutinvizsga
- További aktív témák...
- LG V50
- Eladó Lenovo ThinkPad X1 Carbon Gen 8 prémium üzleti ultrabook, WQHD kijelzővel!
- Eladó HP EliteBook 645 G11 új, dobozos, Ryzen 5, DDR5, LTE képes üzleti laptop!
- Eladó ASUS TUF Gaming F15 (FX507ZU4-LP067W) i7, RTX 4050, gamer laptop!
- Eladó HP Envy x360 15-fe0178ng OLED, RTX 3050, i7-1355U, gyakorlatilag új! 3 órát ment eddig
- Dell Latitude 5495 Full HD IPS Ryzen 5 pro 2500u Radeon Vega Mobile Gfx i5-8350u verő
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- GYÖNYÖRŰ iPhone 14 Pro 128GB Gold -1 ÉV GARANCIA - Kártyafüggetlen, MS3544
- Intel Core i5 4590S 4 mag 4 szál processzor garanciával hibátlan működéssel
- BESZÁMÍTÁS! ASROCK B650M R5 7500F 32GB DDR5 1TB SSD RX 7700XT 12GB Zalman Z1 PLUS A-Data 750W
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest