1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

2 grundlegende Java-Fragen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Samsung I7500, 25.09.2009.

  1. Samsung I7500, 25.09.2009 #1
    Samsung I7500

    Samsung I7500 Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    359
    Erhaltene Danke:
    4
    Registriert seit:
    20.06.2009
    Moinsen!

    Habe mal 2 Fragen zu Java.

    1) In PHP gibt es funktionen wie z.B. call_user_method. Man übergibt dieser Funktion den namen einer Klasse und einer Methode, und dann ruft die Funktion die Methode innerhalb dieser Klasse auf. Gibts sowas auch in Java? Bzw. lässt es sich realisieren?

    2) Mittels Intent kann man ja ne neue Activity starten. Dazu muss man der Funktion ne Klasse übergeben:

    Intent(this,main.class);

    Nun würde ich Klasse gerne dynamisch geladen ala:

    String name = "main.class";
    Intent(this,name);

    (Wie) lässt sich das realisieren?

    Danke schonmal ;)
     
  2. Kranki, 25.09.2009 #2
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
    Ich bin nicht sicher, ob ich verstehe, was du meinst. Soll es da einen Unterschied geben, zu dem, was der banale Punkt-Operator macht?

    Informier dich mal über die Reflection API.
     
  3. Samsung I7500, 25.09.2009 #3
    Samsung I7500

    Samsung I7500 Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    359
    Erhaltene Danke:
    4
    Registriert seit:
    20.06.2009
    Zu 2: Werd ich mir mal anschauen.

    Zu 1:

    PHP:
    class foo {
        function 
    bar() {

        }
    }
    In PHP hast Du 2 Möglichkeiten die Methode bar aufzurufen, entweder über den Scope Resolution Operator:

    PHP:
    foo::bar();
    Oder aber über die call_user_method funktion:

    PHP:
    $class "foo";
    $method "bar";
    call_user_method($class,$method);
    Nur dass beim Letzteren die Namen der Klasse/Methode aus einer Variable (in meinem Fall wiedermal ein String) kommen. So lassen sich Methoden halt dynamisch aufrufen, und mit method_exists() kann man zudem noch überprüfen, ob eine Methode innerhalb einer Klasse existiert, bevor man halt call_user_method() aufruft.

    Läuft prinzipiell auf das selbe wie zu 2 hinaus, funzt mit der Reflection API wunderbar.

    Danke! :)
     
  4. SirMArtin, 25.09.2009 #4
    SirMArtin

    SirMArtin freier Samsungsupporter

    Beiträge:
    113
    Erhaltene Danke:
    7
    Registriert seit:
    05.08.2009
    Das ist beides Reflection. Allerdings ist das ziemlich teuer (==inperformant). Außerdem werden bspw. Refactorings nicht automatisch von Eclipse durchgeführt. Fehler fallen grundsätzlich erst zur Laufzeit auf. Wenn es möglich ist sollte man das vermeiden...

    Was genau willst Du denn machen? ggf. fallen uns ja noch andere Lösungswege als Reflection ein, wenn wir die genaueren Anforderungen kennen. ;)

    SirMArtin
     
  5. Samsung I7500, 25.09.2009 #5
    Samsung I7500

    Samsung I7500 Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    359
    Erhaltene Danke:
    4
    Registriert seit:
    20.06.2009
    Naja was hab ich wohl vor? Genau das, was Reflection da halt macht... ;)

    Ich bastel mir grad ne App, die mit nem Server kommuniziert, und von diesem halt ne Ansage bekommt, welche Funktion sie bei bestimmten Aktionen aufrufen soll. Da sich das unter Umständen jedoch ändern kann, wollt ich das ganze halt dynamisch haben, ohne dass ich dafür extra die App updaten muss...
     
  6. SirMArtin, 25.09.2009 #6
    SirMArtin

    SirMArtin freier Samsungsupporter

    Beiträge:
    113
    Erhaltene Danke:
    7
    Registriert seit:
    05.08.2009
    Naja. Die App muss ja die Funktion unterstützen. Sonst kann der Server ihr ja nicht mitteilen, dass sie diese Funktion auszuführen hat. Somit musst Du die App schon updaten, wenn ne neue Funktion hinzukommt.

    Die Schnittstelle zum Server ist halt fix. Wenn Du die Aufrufe nur per String übergibst, brauchst Du zwar den Teil, der den String parst nicht anpassen. Die App an sich muss aber entsprechend reagieren. Somit hast Du die eigentliche Schnittstelle nur versteckt und tiefer in die Applikation verlagert, anstatt sie direkt in der Schnittstellenklasse umzusetzen. Seperation of Concerns ist hier das Stichwort. Jeder Klasse seine Zuständigkeit. Ein Mechanismus wie REST, SOAP oder XMLRPC sollte Dich hier interessieren.
    Aus Entwicklersicht ist es komplexer, wenn Du Reflection nutzt anstatt einem typisierten Selektionsmechanismus.
    Vielleicht sind ja auch entsprechende Frameworks für Dich interessant (Guice von Google bspw.).

    Just my 2 cents.

    SirMArtin
     

Diese Seite empfehlen