Avatar billede pejtiry Nybegynder
04. november 2002 - 22:31 Der er 11 kommentarer og
2 løsninger

metoder i metoder

Hvordan er syntaksen for en metode i en anden metode? Jeg skal printe en flybillet udfra værdierne i en lokal variabel i en metode: public void actionPerformed(ActionEvent actionEvent){int plads....
}
Jeg ønsker at anbringe:
       
        public void udskrivBoardingPass()
        {
            String type="ukendt";
            if (plads == RYGER)
                type = "RYGER";
            if (plads == IKKE_RYGER)
                type = "IKKE RYGER";
            output.append("Plads: " + plads + " er reserveret i " + type + " afdeling\n");
        }// end method udskrivBoardingPass

inde i "actionPerformed".
Det er klart at jeg kunne anbringe metoden udenfor actionPerformed og fodre den med værdien, men den giver ikke mening for andre dele af koden. Jeg kunne også lade være med at erklære det som metode, men bare flette koden ind i actionPerformed, men dette forekommer lidt rodet og ikke særligt nemt at fejlrette.
Avatar billede soreno Praktikant
04. november 2002 - 22:44 #1
du kan ikke indlejre metoder i java.
enten skriver du koden direkte i metoden, eller også kalder du en metode.
Avatar billede dsj Nybegynder
04. november 2002 - 22:50 #2
Du kan kun placere koden i selve metoden public void actionPerformed() eller lave en anden metode public void udskrivBoardingPass(), som du kalder fra actionPerformed().

Om det er rodet tjaaaaa. Skal vi se på hvordan man gør sådan professionelt, så deler man koden op i tre komponenter: model-, funktions- og brugergrænsekomponent (GUI). Skal det gøres ordentligt, skal du have en klasse: BoardingPass. Denne klasse kan så på sig selv have en metode der hedder udskriv(), som du kalder fra GUI-komponenten - actionPerformed(). Du kan også lave en funktionsklasse (statiske metoder), hvor du har en metode: udskriv(BoardingPass pass).

Hjalp det lidt?
Avatar billede pejtiry Nybegynder
04. november 2002 - 22:50 #3
Æv, du har sikkert ret, men det kan man i Delphi. Jeg venter lige lidt med at aceptere til jeg ser om der er flere der gider kommentere. Foreløbig tak.
Avatar billede dsj Nybegynder
04. november 2002 - 22:54 #4
Øhh ok, vi venter, men tak for pointene :O)

Men du må sige til hvis du vil have uddybet det lidt...
Avatar billede pejtiry Nybegynder
04. november 2002 - 23:03 #5
dsi

Ja, selv tak, men jeg var ved at skrive kommentaren som svar til soreno, og imens havde du har allerede udybet og bekræftet sorenos svar. Problematikken er opstået i en opgave der bruger en applet og 3-lags model ville være total overkill. Jeg løser det med en metode udenfor.
Avatar billede arne_v Ekspert
04. november 2002 - 23:30 #6
Java er mere inspireret af  C/C++ end af Pascal.
Avatar billede arne_v Ekspert
04. november 2002 - 23:46 #7
Iøvrigt kan man godt putte en metode inden i en metode !

Men jeg kan ikke se, at det på nogen måde skulle hjælpe
dig til at gøre din kode pænere.

Eksempel:

public class Test {
  public static void main(String[] args) {
      test();
  }
  private static void test() {
      (new Object() { void test2() { System.out.println("!"); return; } }).test2();
  }
}
Avatar billede pejtiry Nybegynder
05. november 2002 - 00:03 #8
Tak Arne!

Den tygger jeg lige lidt på.
Jeg går ud fra at den indlejrede metode er "test2", der skabes som et objekt, og derpå kalder sig selv. Det ser bare ikke ud til at jeg har fat i objektet næste gang jeg vil bruge det. Skal jeg ikke have en variabel til at gemme referencen i? Fidusen ved at indlejre en metode kan jo også være at man kan kalde den så mange gange man har brug for. På den måde kan man centralisere sin kode lidt. Og det forekommer at være en kilde til fejl at anbringe metoden udenfor, da den nu kunne bruges af andre metoder uden at være beregnet derpå.
Avatar billede pejtiry Nybegynder
05. november 2002 - 00:05 #9
PS. Arne

Hvis du gerne vil have point så sig lige til, så opretter jeg et point til Arne spørgsmål.
Avatar billede pejtiry Nybegynder
05. november 2002 - 00:09 #10
Men det bliver først i morgen, for nu er det sengetid :)
Avatar billede arne_v Ekspert
05. november 2002 - 00:20 #11
Du kan godt gemme objektet, men det er ikke så nemt at genbruge.

Koden blev både grim og langsom af det.

Eksempel:

import java.lang.reflect.*;

public class Test {
  public static void main(String[] args) throws Exception {
      test();
  }
  private static void test() throws Exception {
      Object o = new Object() { void test2() { System.out.println("!"); return; } };
      o.getClass().getDeclaredMethod("test2", new Class[0]).invoke(o, new Object[0]);
      o.getClass().getDeclaredMethod("test2", new Class[0]).invoke(o, new Object[0]);
      return;   
  }
}
Avatar billede arne_v Ekspert
05. november 2002 - 00:21 #12
Jeg vil absolut ikke anbefale dig at gå denne vej.

Det er en ren akademisk øvelse udi Javas
krinkel-kroge.
Avatar billede arne_v Ekspert
05. november 2002 - 00:22 #13
Point er altid rare, så hvis du vil give nogen modtages
de med glæde.

Jeg er først på igen ca. kl. 14 imorgen.
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