04. november 2002 - 22:31Der 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.
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).
Æ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.
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.
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å.
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; } }
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.
Synes godt om
Ny brugerNybegynder
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.