Klasse einer Methode übergeben und überprüfen

Status
Nicht offen für weitere Antworten.

sisko78

Bekanntes Mitglied
Hallo,

ich will einer Methode eine Klasse als Parameter übergeben, also etwa so:
Code:
public void addResource(Class resource) {}
Diese Klasse soll dann automatisch instantiiert werden und vielleicht noch überprüft werden, ob ein bestimmtes Interface implementiert und/oder von Thread abgeleitet ist, zudem soll noch eine zeitliche Steuerung der Resourcen stattfinden.
Hab jetzt mal die Methode Class.newInstance() gesichtet, leider kann ich dem Konstruktor so keine Argumente übergeben. Desweiteren bin ich über Class.getConstructor(Class[] parameterTypes) und Contructor.newInstance(Object[]) gestolpert.
Aber vielleicht hat mir jemand einen Tip, wie man das am besten angeht, bevor ich mich hier in die total falsche Richtung bewege.
Danke schonmal

Gruß
sisko78
 

Wildcard

Top Contributor
Um sinnvoll mit Reflection instanzieren zu können brauchst du einen sichtbaren Default-Konstruktor.
 

sisko78

Bekanntes Mitglied
Danke, Reflection war das entscheidende Stichwort, hab jetzt auch weitergehende Literatur. Aber ich bin wohl auf dem richtigen Weg gewesen.
 

Wildcard

Top Contributor
Bleiglanz hat gesagt.:
stimmt doch nicht? die methode mit dem Object[] ist schon ok
natürlich geht das so, aber so wie sich das angehört hat werden recht beliebige Klassen übergeben.
Finde es einfach wesentlich sinnvoller dann einen paramterlosen-Konstruktor anzubieten, als irgendwelche Paramterlisten zu erzeugen
(wenn die Parameter direkt mitgeliefert werden oÄ ist das natürlich was anderes)
 

sisko78

Bekanntes Mitglied
ja, würde ich auch lieber machen. Sind aber alles Klassen, die gleich aufgebaut sind (müssen ein bestimmtes Interface implementieren) und ein Suchargument bekommen sollen, nach dem in verschiedenen Resourcen (google, wordnet etc.) gesucht werden soll. Sonst müsste ich das irgendwo static hinterlegen.

Jetzt ist aber gerade eine neue Frage aufgekommen:
Ich würde in der addResourceKeywords Methode gerne darauf verzichten, erst die Methoden zu erfragen und dann per invoke aufzurufen.
Ich würde das Object gerne in den zugehörigen Klassentyp casten, um die jeweiligen Methoden ausführen zu können. Geht das irgendwie?

Code:
import java.lang.reflect.Constructor;
import java.lang.reflect.*;
import java.util.Vector;


public class DefaultResourceControl {

  String query;
  Object resourceObject;
  Class resourceClass;

  public DefaultResourceControl(String query) {
    this.query = query;
  }
  public boolean isOnlineResource(Class resource) {
    return false;
  }
  /**
   * Checks if the Resource can run an own thread, i.e. if it extends Thread or
   * implements Runnable
   *
   * @return boolean
   */
  public boolean isValidResource() {
    boolean isValid;
    Class[] interfaces = resourceClass.getInterfaces();
    for (int i = 0; i < interfaces.length; i++) {
      if (interfaces[i].getName().equals("java.lang.Runnable")) {
        System.out.println("Class implements Interface Runnable");
        return true;
      }
    }
    if (resourceClass.getSuperclass().getName().equals("java.lang.Thread")) {
      System.out.println("Class extends Thread");
      return true;
    }

    return false;
  }

  /**
   * Here you can add your extern search resource. It has to be a class with a
   * contructor taking one argument of String type. There will be a
   * NoSuchMethodException otherwise. Additionally it has to implement the
   * SearchResource Interface and has to use an own thread, i.e. extend Thread
   * or implement Runnable.
   *
   * @param className String
   */
  public void addResource(String className) {

    try {
      Class resourceClass = Class.forName(className);
      System.out.println("try to add resource: " + resourceClass.getName());
      this.resourceClass = resourceClass;
      Class[] param = new Class[] {
          String.class};
      Constructor constructor =
          (resourceClass).getConstructor(param);
      Object[] arg = new Object[] {
          query};
      this.resourceObject = constructor.newInstance(arg);
      
    }
    catch (Exception e) {
      System.err.println(e.toString());
      System.exit(1);
    }
    if (!isValidResource()){
      return;      
    }
    addResourceKeywords();
  }

  public void addResourceKeywords() {    
    try {
      Method startThread = resourceClass.getMethod("start", null);
      Method join = resourceClass.getMethod("join", null);
      Method getVector = resourceClass.getMethod("getKeywordVector", null);
      startThread.invoke(resourceObject,null);      
      join.invoke(resourceObject,null);
      Vector v1 = (Vector)getVector.invoke(resourceObject,null);
      System.out.println(v1.get(0).toString());//test      
    }
    catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    }    
  }  
}
 

Wildcard

Top Contributor
sisko78 hat gesagt.:
ja, würde ich auch lieber machen. Sind aber alles Klassen, die gleich aufgebaut sind (müssen ein bestimmtes Interface implementieren) und ein Suchargument bekommen sollen, nach dem in verschiedenen Resourcen (google, wordnet etc.) gesucht werden soll.
Wenn die alle den gleichen simplen Konstruktor verwenden ist das ja kein Problem. Vergiss meinen Einwand :wink:

sisko78 hat gesagt.:
Jetzt ist aber gerade eine neue Frage aufgekommen:
Ich würde in der addResourceKeywords Methode gerne darauf verzichten, erst die Methoden zu erfragen und dann per invoke aufzurufen.
Ich würde das Object gerne in den zugehörigen Klassentyp casten, um die jeweiligen Methoden ausführen zu können. Geht das irgendwie?

Implementier in allen Klassen ein Interface und caste auf das Interface hin...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
D Eclipse Methode einer anderen Klasse aufrufen Allgemeine Java-Themen 14
C Auf eine Methode von einer anderen Klasse aus ändern? Allgemeine Java-Themen 4
P Reflection - Wie rufe ich die Felder einer Klasse in einer Methode der Basisklasse? Allgemeine Java-Themen 4
C Aufruf einer Methode einer anderen Klasse Allgemeine Java-Themen 14
G Aufruf einer Methode wenn Klasse noch nicht existiert Allgemeine Java-Themen 3
G Generics: Instanzieren einer Klasse in einer Methode. Allgemeine Java-Themen 2
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
Messoras Klassen Sämtliche Variablen einer Klasse übernehmen Allgemeine Java-Themen 6
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
A Best Practice Unterschied zwischen einer sauberen Dependency Injection und einer statischen Klasse Allgemeine Java-Themen 5
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
N Automatisches einfügen einer selbst generierten ID in Klasse mit Annotation Allgemeine Java-Themen 8
3 OOP Instanzen aus einer Klasse persistent speichern. Allgemeine Java-Themen 9
S Zur Laufzeit Klasse mit einer anzahl von X Objekten erstellen Allgemeine Java-Themen 5
T Klassen Mehoden einer Klasse erweitern Allgemeine Java-Themen 5
T Klassen Instanz einer Klasse ausserhalb des Jar Allgemeine Java-Themen 2
G Fehler beim instanzieren einer Generischen Klasse Allgemeine Java-Themen 5
S Tool um mehrere Klassen in einer Klasse vereinen? Allgemeine Java-Themen 6
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
T Alle Instancen einer Klasse auflisten Allgemeine Java-Themen 13
Gossi Threads mit unterschiedlichen Aufgaben in einer Klasse? Allgemeine Java-Themen 9
Z Socket Aufruf einer Klasse in einer anderen Klasse Allgemeine Java-Themen 6
M Typ einer inneren Klasse mit reflections finden Allgemeine Java-Themen 7
F Warum kann man nur von einer Klasse erben? Allgemeine Java-Themen 10
E Collections Collections die Subojekte einer Klasse enthält? Allgemeine Java-Themen 7
D von einer Klasse auf Komponente in anderer Klasse zugreifen Allgemeine Java-Themen 5
A variable aus einer anderen klasse verändern Allgemeine Java-Themen 5
Kr0e Reflection - Instanz einer Klasse erstellen, ohne Default-Constructor Allgemeine Java-Themen 15
Z Daten von einer Klasse in eine andere übertragen Allgemeine Java-Themen 8
C Variablen Variable einer Klasse in einer anderen Klasse Nutzen Allgemeine Java-Themen 8
P Threads Thread innerhalb einer Klasse - ohne Extra Klasse Allgemeine Java-Themen 9
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
A Listener für constructor einer bestimmen Klasse Allgemeine Java-Themen 9
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
P Variablen in einer anderen Klasse auf Änderungen überwachen Allgemeine Java-Themen 12
M Neue Instanz/Kopie einer unbekannten Klasse Allgemeine Java-Themen 7
D Referenz einer Funktion aus einer anonymen Klasse? Allgemeine Java-Themen 3
W Erweitern einer Klasse mit Generics Allgemeine Java-Themen 8
J InvocationException im Thread (innerhalb von call() einer Callable Klasse) Allgemeine Java-Themen 2
N JAR Datei ausführen unter Angabe einer speziellen Klasse Allgemeine Java-Themen 2
P Objekt einer Klasse erzeugen, die als String vorliegt Allgemeine Java-Themen 3
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
multiholle Objekt einer Klasse anhand eines String erzeugen Allgemeine Java-Themen 3
S Identische Methoden in einer Klasse Allgemeine Java-Themen 2
G Objekt einer inneren Klasse als Listener Allgemeine Java-Themen 3
J Instanz-Felder einer Klasse initialisieren Allgemeine Java-Themen 6
G Thread einer anderen Klasse Allgemeine Java-Themen 8
reibi Klassenpfad mal anders - dynamisches Laden einer Klasse Allgemeine Java-Themen 7
S toString() für alle Member einer Klasse. Allgemeine Java-Themen 6
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
G generische Klasse als Parameter einer generischen Klasse Allgemeine Java-Themen 5
V Aus String -> Objekt einer Klasse erzeugen Allgemeine Java-Themen 7
S Problem mit einer Klasse Allgemeine Java-Themen 10
R Wert von einer Klasse in eine andere bekommen Allgemeine Java-Themen 6
G genauen Typ einer generischen Klasse zur Laufzeit ermitteln Allgemeine Java-Themen 2
K Suche alle Objekte einer bestimmten Klasse Allgemeine Java-Themen 2
L Auflistung aller Methoden einer Klasse Allgemeine Java-Themen 9
E Array einer anonymen Klasse Allgemeine Java-Themen 6
M Beim Laden einer Klasse implizit weitere Klassen mitladen Allgemeine Java-Themen 3
B objekt einer klasse dynamisch erzeugen Allgemeine Java-Themen 6
S Hinzufügen einer Klasse! Allgemeine Java-Themen 3
W Probleme beim Ausführen einer Java Klasse auf Kommandozeile Allgemeine Java-Themen 17
T Instanz einer Interface abgeleiteten Klasse erzeugen Allgemeine Java-Themen 3
B Instanzen einer Klasse als Array Allgemeine Java-Themen 7
C Objekte einer Klasse zählen Allgemeine Java-Themen 25
M vererbung einer "selbst-instanzierungs-klasse" Allgemeine Java-Themen 16
V Objekt einer Klasse, deren Name nur als String vorhanden Allgemeine Java-Themen 4
K Testen einer Klasse mit File Objekt als Parameter Allgemeine Java-Themen 6
P Maximale Größe einer Klasse Allgemeine Java-Themen 9
M Überprüfen einer zur Laufzeit geladenen Klasse Allgemeine Java-Themen 3
M Rückgabewert einer Klasse Allgemeine Java-Themen 4
G jar-Name einer Klasse Allgemeine Java-Themen 9
H Funktion aus einer anderen Klasse ausführen Allgemeine Java-Themen 3
D Gehts praktischer? Thema:Verschiedene Instanzen einer Klasse Allgemeine Java-Themen 3
G mit reflection an die felder einer klasse rankommen Allgemeine Java-Themen 4
M Felder + Werte einer Klasse auslesen Allgemeine Java-Themen 6
B Absolute Paf einer Klasse in dieser dynamisch auslesen? Allgemeine Java-Themen 5
G Panel einer Klasse in einer anderen anzeigen Allgemeine Java-Themen 4
A Eine Datei in einer Klasse Allgemeine Java-Themen 14
M Sourcecode einer API-Klasse Allgemeine Java-Themen 4
A Was haltet ihr von einer standardisierten Main Klasse? Allgemeine Java-Themen 4
M Class-Object einer Klasse Allgemeine Java-Themen 4
G Nur bestimmte Variablen einer Klasse übernehmen Allgemeine Java-Themen 4
J Instanz einer inneren Klasse Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben