[JAVA]Voorkomen dat object opnieuw geinstantieerd wordt.

Pagina: 1
Acties:

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
Ik heb vier frames (verwijderen, toevoegen, wijzigen en zoeken). Deze frames zijn een overerving van het frame persoon.
code:
1
public class [NAAM] extends Persoon

Persoon is weer een overerving van het frame hoofdklasse.
code:
1
public class Persoon extends Hoofdklasse


In het frame Hoofdklasse wordt een LinkedList geinstantieerd:
code:
1
public class Hoofdklasse extends JFrame

code:
1
static Lijst personenverzameling;


De klasse Lijst bevat de LinkedList:

Zolang ik twee vensters (bijv. zoeken en verwijderen) heb openstaan, dan gaat alles goed. Ik verwijder persoon1 en die is dan ook echt verwijderd.
Sluit ik echter een venster en open ik dan een nieuw venster , dan wordt de LinkedList opnieuw geinstantieerd en is persoon1 weer keurig terug.

Wat ik wil is dat de LinkedList niet opnieuw geinstantieerd wordt als een venster geopend wordt. De LinkedList moet eenmalig geinstantieerd worden tijdens het opstarten van de applicatie.

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Singleton maken van de Lijst class ?

[ Voor 53% gewijzigd door whoami op 15-11-2006 16:26 ]

https://fgheysels.github.io/


Verwijderd

hmm ik krijg een beetje een "Auto extends Grasmat implements Waterval" gevoel

  • Standeman
  • Registratie: November 2000
  • Laatst online: 21:25

Standeman

Prutser 1e klasse

Verwijderd schreef op woensdag 15 november 2006 @ 16:31:
hmm ik krijg een beetje een "Auto extends Grasmat implements Waterval" gevoel
Ik vind het inderdaad enorm vreemd dat de class "Persoon" overerft van JFrame :?

Dat je bijv. een PersonPanel hebt met daarin de fields welke de class Persoon representeerd, zou ik iig veel logischer vinden.
Ik zou gaan kijken naar het concept "encapsulation".
(ik heb zelf het motto "inheritance is evil' en gebruik inheritance alleen wanneer het overduidelijk is (zoals 'public class Employee extends Person').

Maar om kort te zijn. Een singleton voorkomt inderdaad dat een class twee keer wordt geinstantieerd, hoewel ik betwijfel of je dat daadwerkelijk wilt (lost het directe probleem misschien wel op, maar dan werk je je zelf waarschijnlijk weer ergens anders in de nesten).

The ships hung in the sky in much the same way that bricks don’t.


  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
Standeman schreef op woensdag 15 november 2006 @ 16:39:
[...]


Ik vind het inderdaad enorm vreemd dat de class "Persoon" overerft van JFrame :?

Dat je bijv. een PersonPanel hebt met daarin de fields welke de class Persoon representeerd, zou ik iig veel logischer vinden.
Ik zou gaan kijken naar het concept "encapsulation".
(ik heb zelf het motto "inheritance is evil' en gebruik inheritance alleen wanneer het overduidelijk is (zoals 'public class Employee extends Person').

Maar om kort te zijn. Een singleton voorkomt inderdaad dat een class twee keer wordt geinstantieerd, hoewel ik betwijfel of je dat daadwerkelijk wilt (lost het directe probleem misschien wel op, maar dan werk je je zelf waarschijnlijk weer ergens anders in de nesten).
Het frame Persoon bevat alle invoervelden. Elk scherm (toevoegen / verwijderen etc.) erft deze invoervelden en voegt daar de nodige button aan toe (bijv. toevoegen / verwijderen).

Alle buttons kunnen ook in 1 scherm (Persoon) gepropt worden, maar daar gaat het probleem niet over. Want als ik dan het scherm Persoon sluit en opnieuw open, dan wordt alsnog de LinkedList opnieuw geinstantieerd en dat wil ik juist voorkomen, maar hoe doe ik dat?

Is er een betere manier dan een singleton?

  • DroogKloot
  • Registratie: Februari 2001
  • Niet online

DroogKloot

depenisvanjezus

Even heel ranzig gedacht, maar:

Java:
1
2
3
if (Hoofdklasse.personenverzameling == null) {
    Hoofdklasse.personenverzameling = new Lijst();
}

[ Voor 4% gewijzigd door DroogKloot op 15-11-2006 16:56 ]


  • Standeman
  • Registratie: November 2000
  • Laatst online: 21:25

Standeman

Prutser 1e klasse

van.der.schulting schreef op woensdag 15 november 2006 @ 16:48:
[...]


Het frame Persoon bevat alle invoervelden. Elk scherm (toevoegen / verwijderen etc.) erft deze invoervelden en voegt daar de nodige button aan toe (bijv. toevoegen / verwijderen).

Alle buttons kunnen ook in 1 scherm (Persoon) gepropt worden, maar daar gaat het probleem niet over. Want als ik dan het scherm Persoon sluit en opnieuw open, dan wordt alsnog de LinkedList opnieuw geinstantieerd en dat wil ik juist voorkomen, maar hoe doe ik dat?

Is er een betere manier dan een singleton?
De linked list meegeven aan bij de instantiatie van het frame "Persoon". (maar hernoem deze alsjeblieft naar PersoonFrame ofzo, dit vraagt gewoon om verwarring B) )

dus zoiets:

Java:
1
2
3
4
...
LinkedList list = new LinkedList();
JFrame persoon = new Persoon(list);
..


Dus elke keer wanneer je het object Persoon wil instantieren, geef je de Linked list mee.

(Je haalt de LinkedList dus uit de scope van je frame en stopt deze in de scope van je applicatie)
DroogKloot schreef op woensdag 15 november 2006 @ 16:55:
Even heel ranzig gedacht, maar:

Java:
1
2
3
if (Hoofdklasse.personenverzameling == null) {
    Hoofdklasse.personenverzameling = new Lijst();
}
Dat is juist niet de bedoeling. De TS wilt gebruik blijven maken van dezelfde instantie in elk Persoon object.

[ Voor 16% gewijzigd door Standeman op 15-11-2006 17:06 ]

The ships hung in the sky in much the same way that bricks don’t.


  • DroogKloot
  • Registratie: Februari 2001
  • Niet online

DroogKloot

depenisvanjezus

Dat kan op mijn manier ook, aangezien de referentie die op null gecontroleerd wordt static is. Maar zoals ik al zei, het is evengoed een ranzige oplossing. ;)

[ Voor 8% gewijzigd door DroogKloot op 15-11-2006 17:28 ]


  • Zinno1973
  • Registratie: November 2006
  • Laatst online: 25-04-2022
Je maakt een aparte klasse waaraan je een nieuwe instantie van Persoon vraagt. Deze klasse zorgt er dan voor dat je altijd dezelfde lijst mee krijgt. ( zoals Standeman al beschreef ) Op die manier zorg je ervoor dat je altijd als je een nieuwe persoon aanmaakt altijd dezelfde lisjt hebt.

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Je kunt de lijst inladen via een static initializer block binnen de gerelateerde klasse.

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
dank voor jullie hulp, mijn probleem is iig opgelost :)
Pagina: 1