Java: Hogyan lehetséges inner class referenciájából elérni a külső class változóit, metódusait?
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
}
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.
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!