Avatar billede pejtiry Nybegynder
26. juli 2002 - 21:48 Der er 3 kommentarer og
1 løsning

Delegation

Hvordan lader jeg et objekt der er private member overtage alle metoder untagen de få jeg evt. ønsker at overwrite? Jeg vil extende et objekt og som en del af cunstructoren give det en reference til et objekt af den klasse jeg extender (super). I dette tilfælde vil jeg extende et JTextField objekt: public class myTextField extends javax.swing.JTextField {
  private javax.swing.JTextField _field;
  public myTextField(javax.swing.JTextField field){_field = field;}
...
}
Da _field er af myFields super klasse kan alle opgaver uddelegeres til den, men hvordan undgår jeg at skulle override hver eneste metode manuelt f.eks.:
  public boolean equals(Object obj) {
    return _field.equals(obj);
  }
Det tager uendeligt lang tid at skrive alle metoder om, så jeg håber der findes en genvej.
Avatar billede soelvpil Nybegynder
27. juli 2002 - 08:49 #1
Det gør der kke, hvis du er nødt til at delegere til JTextField.

Et eller andet sted i koden må der ligge et kald til new JTextField()
Hvis du erstatter dette med new myTextField() så får du alle metoderene gratis.

Det virker selvfølgelig kun, hvis du selv er herre over den kode, der laver det nye JTextField, så du kan ændre det. Og du kan evt blive nødt til at skrive et par constructorer svarende til dem der findes for JTextField()
Avatar billede emileej Nybegynder
27. juli 2002 - 18:51 #2
Arv er meget smartere end du (pejtiry) slår op. Eksempel:
Hvis du vil have en _nøjagtig_ kopi af JTextField gør du således:

public class KTextField extends javax.swing.JTextField{new KTextField(){}};

Herefter kan du så overwrite de metoder du vil have lavet om - ikke _alle_ metoderne til JTextField...

E-)mil
http://mfp.eej.dk
Avatar billede pejtiry Nybegynder
28. juli 2002 - 23:02 #3
Problemet er at der er tale om et visuelt component, der allerede har en position og er placeret. Jeg ønsker at tilføje det egenskaber. Jeg vil wrappe det og køre alle henvendelser igennem mit objekt. Eller om man vil lave en proxy.
Avatar billede logical Nybegynder
30. august 2002 - 21:28 #4
Jeg kender din problemstilling, men så langt nede i componenthierarket er det et problem, så hvis du vil det du mener, så er der kun den hårde vej.

det IDE, som hedder IDEA fra www.intellij.com giver dig lidt hjælp til at skrive alle metodeprototyperne (ctrl-o, override methods), og så lav en søg og erstat på ordet super, så er det nogenlunde.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester