Kezdőoldal » Számítástechnika » Programozás » Java: Hogyan lehetséges inner...

Java: Hogyan lehetséges inner class referenciájából elérni a külső class változóit, metódusait?

Figyelt kérdés

van egy class-om és annak egy non-static inner class-ja. Egy másik classban (és egyúttal másik file-ban) van egy változóm, ami egy ennek a non-static inner class egyik példányának referenciáját tárolja. Ezzel a változóval szeretném elérni a hozzátartozó outer class példányának változóit, metódusait. Hogyan lehetséges ?


Kódban valahogy így nézne ki:


package proba;

import java.awt.event.*;


public class OuterClass {

public int someNumber = 5; // elérendő változó


public class InnerClass extends JPanel {


InnerClass() { // constructor


MouseHandler mlistener = new MouseHandler(); // ez lesz a class amelyikből el akarom érni

addMouseListener(mlistener);

addMouseMotionListener(mlistener);

addMouseWheelListener(mlistener);

}


// ENNEK A METÓDUSNAK A HASZNÁLATA NÉLKÜL!!!

public OuterClass getOuterClass() {

return OuterClass.this;

}



} // end of InnerClass


public void someMethod() {...} // elérendő metódus

// többi kód ...

}


És akkor a class amiből el akarom érni:


package proba;

import java.awt.event.*;


public MouseHandler implements MouseListener, MouseMotionListener, MouseWheelListener {


@Override

public void mousePressed(MouseEvent mevent) {


InnerClass icvar1 = (InnerClass)mevent.getSource();


//***** itt hogy érem el az icvar1-gyel a number1 változót és a someMethod() metódust ? *****//



}

// többi absztrakt metódus implementálása

// többi kód


}



#Java #nested class
2014. jan. 8. 00:36
 1/4 A kérdező kommentje:
A formázást elrontotta az oldal, de remélem így is érthető.
2014. jan. 8. 00:40
 2/4 iostream ***** válasza:
Amennyire én a Javához értek, ez így nem működik. A belső osztály LÁTHATÓSÁGA módosul a belsőségtől, de a belső osztálynak nem része a külső osztály. Nincs benne meg a külső osztály, azt neked kell beletenni ha akarod.
2014. jan. 8. 09:11
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:

A Javaban egy this$0 nevezetű változó tárolja az outer class referenciáját. Ezt a következőképpen érheted el:

icvar1.getClass().getDeclaredField("this$0").get(icvar1);


Szerintem sokkal szebb megoldás a getOuterClass(), de válaszd amelyiket akarod.

2014. jan. 8. 14:37
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:

Köszönöm a válaszokat!


Kipróbáltam, működik.

Maradok a getOuterClass()-nál tényleg elegánsabb megoldásnak tűnik.

this$0 ránézésre eléggé a Java saját magának fenntartott változójának tűnik, gondolom egyéb kerülőutas machinációkra fel lehet használni, de elöször a nyelvet akarom megtanulni jól használni.

2014. jan. 8. 18:16

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!