tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
16004
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo,

    ich möchte beim Aufruf einer Methode ihr als Parameter eine Methode übergeben, welche sie dann ausführt.

    Ist das Möglich? Wenn ja wie?
    Habs mit der Wrapperklasse java.lang.Void vergeblich versucht. Funktioniert leider nicht, da man keine Objekte der Klasse Void erzeugen kann. Eine andere Alternative fällt mir jetzt nicht ein.

    VG Erdal

    Beispiel:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    public class Met {
     
      public void a () {
        c(b());
      }
     
      public void b () {
        System.out.println("Test");
      }
     
      public void c (Methode m) {
        "Führe m aus"
      }
     
      public static void main (String[] args) {
        a();
      }
    }
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Schau mal hier:
    (Per Reflection)
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    
       /**
        * 
        */
       package de.tutorials;
       
       import java.lang.reflect.Method;
       import java.lang.reflect.Modifier;
       
       /**
        * @author Tom
        * 
        */
       public class MethodInvocationExample {
       
        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
       
            Foo foo = new Foo();
            System.out.println(invokeMethod("methodA", new Class[0], new Object[0],
                    foo.getClass(), foo));
            System.out.println(invokeMethod("methodB", new Class[] { int.class,
                String.class }, new Object[] { Integer.valueOf(10), "Foo" },
                    foo.getClass(), foo));
            System.out.println(invokeMethod("methodC",
                new Class[] { String.class }, new Object[] { "Bar" }, foo
                        .getClass(), foo));
       
        }
       
        private static Object invokeMethod(String methodName, Class[] signature,
                Object[] parameters, Class targetClass, Object target)
                throws Exception {
            Method m = targetClass.getDeclaredMethod(methodName, signature);
       
            if (Modifier.isPrivate(m.getModifiers())) {
                m.setAccessible(true);
            }
       
            return m.invoke(target, parameters);
        }
       
        static class Foo {
            private void methodA() {
                System.out.println("methodA");
            }
       
            public void methodB(int i, String s) {
                System.out.println("methodB: " + i + " " + s);
            }
       
            public static int methodC(String s) {
                System.out.println("methodC " + s);
                return 42;
            }
        }
       
       }
    Oder per CommandPattern:
    http://www.google.de/search?hl=de&q=...a=lr%3Dlang_de

    (Siehe auch die Klassen java.beans.Statement, java.util.concurrent.Callable ...)

    Gruss Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Tach.
    Das geht wunderbar, wenn der Rückgabewert der Methode m passt.
    Also wenn c einen integerwert erwartet, darf m auch nur nen int-wert
    zurückgeben.
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  4. #4
    Inkarnat Inkarnat ist offline Grünschnabel
    Registriert seit
    Jul 2008
    Beiträge
    1
    hi,

    tschuldigung, dass ich so einen alten Thread auspacke, aber ich habe eine ähnliche Problematik zu bewältigen...

    ich wollte auch per Reflection eine Methode als Parameter übergeben, doch
    aus dem schönen Beispiel von Thomas Darimont oder auch aus dieser Quelle:
    http://de.wikibooks.org/wiki/Java_Standard:_Class

    scheint hervorzugehen, dass
    Class.getDeclaredMethod(methodName, signature) als signature nur ein seltsames Class<?>[] Object, das nur Primitives halten "verträgt".

    Die Methoden, die ich aufrufen möchte, erwarten als Parameter aber Objekte - wie kann ich diese aufrufen?

    gruß Inkarnat
     

  5. #5
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    du kannst in dem Class[] auch andere Class-Objecte mitgeben, nicht nur primitive.

    MFG

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  6. #6
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    Mal ne Frage...
    muss die Methode denn unbedingt generisch (soll mheißen: beleibig) sein?
    Ich verwende für sowas normalerweise Interfaces.
     

Ähnliche Themen

  1. Bean-Variablen als Parameter einer Methode einer anderen Bean
    Von mcdroemmel im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 25.06.09, 17:53
  2. Antworten: 1
    Letzter Beitrag: 13.08.08, 19:37
  3. Antworten: 3
    Letzter Beitrag: 06.07.08, 23:54
  4. Antworten: 2
    Letzter Beitrag: 06.06.07, 18:37
  5. Variablenname als Parameter an Methode übergeben
    Von muetze_online im Forum Java
    Antworten: 10
    Letzter Beitrag: 11.04.06, 03:29