Avatar billede fbisoft Nybegynder
30. november 2002 - 23:23 Der er 6 kommentarer og
1 løsning

Kan en bruger ændre en metode ?

mit spørgsmål går er:

hvis jeg vil kalde en metode fra min main klasse:

Test.udregn("plus");

i klassen Test er min metode :

public void udregn(String x){

System.out.println(Konto.get+x())


i Kontoklassen har jeg forskellige set/get metoder: getPlus,getMinus  osv....


dette er selvfølgelig et tænkt eks.
det er bare for at undgå en masse if/case sætninger

Jeg håber der nogen der vil hjælpe mig
Avatar billede jakoba Nybegynder
01. december 2002 - 05:59 #1
i din klasse test kan du evt lave en funktion 
  void setOperator( "+" ) { ...  // tilladte parametre fx: +, -, *, /
og så lade en case-sætning i funktionen udregn skelne imellem dem.

Det er dog en tand mere gemmenskueligt hvis du sender operatoren med som parameter (som du også selv er inde på:

public void udregn( char operator ) {
    switch ( operator ) {
        case '+': // læg sammen
                  break;
        case '-': // træk fra
                  break;
        case '*': // gang
                  break;
        case '/': // divider
                  break;
        default:  System.out.println( "Ugyldig operator: '" +operator +"'" );
    }
}

men jeg er lidt usikker, er det den case sætning du ønsker at undgå?

mvh JakobA
Avatar billede elkjer Nybegynder
01. december 2002 - 06:23 #2
Hvis du vi helt undgå if/case sætninger kan det gøres via reflection, men igen så kommer der et problem med den parameter streng "plus". Den bliver i så fald case sensitiv.
Avatar billede hsg Nybegynder
02. december 2002 - 13:15 #3
elkjer: Han kunne jo sende tegnet +, - osv over som parameter
og så evt. kaste en exception hvis tegnet var forkert.
Avatar billede fbisoft Nybegynder
02. december 2002 - 15:58 #4
jeg vil lige uddybe mit spørgsmål men et andet eksempel!
i koden nedenfor bliver der overfør en String, den kunne hedde "besked" den ville jeg gerne kunne appende til (get) så brugeren bestemte hvad der skulle sorteres efter!
så ville jeg slippe for at skulle lave en masse if - sætninger, if (bla.bla getKunde, getKonto osv. osv.)

er det tydeligt hvad jeg håber på at opnå? kan det overhovedet lade sig gøre?
 

public ArrayList sorteringAfMetode(String metode)
Annonce a= (Annonce) arrayListe.get(j);
Annonce b= (Annonce) arrayListe.get(min);
if ( a.get+metode().compareToIgnoreCase(b.get+metode())<0){
    bla.bla... byt plads bla. bla. og mere bla.
}

return arrayListe;
Avatar billede jakoba Nybegynder
03. december 2002 - 06:38 #5
Nej, den går ikke i java. Jave er et kompileret sprog og den slags tricks kan kun laves i script-sprog.
Avatar billede cprovstgaard Nybegynder
03. december 2002 - 09:05 #6
Den slags tricks går fint i java. Du kan invokere metoder dynamisk via javas reflection API. (se fx pakken java.lang.reflect).

Følgende metode demonstrerer princippet i dynamisk invokation af en metode:

import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;

  public static Object invokerByName(Object object, String metodeNavn, Class[] parameterTyper, Object[] parameterVærdier) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
    Class objectClass = object.class;
    Method method = objectClass.getDeclaredMethod(metodeNavn, parameterTyper);
    return method.invoke(object, parameterVærdier);
  }
Avatar billede cprovstgaard Nybegynder
04. december 2002 - 08:56 #7
Undskyld mig:
linien
    Class objectClass = object.class;
skal selvfølgelig hedde med
    Class objectClass = object.getClass();
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