Externe (unbekannte) Klasse nutzen

Status
Nicht offen für weitere Antworten.

thE_29

Top Contributor
Hi!

Ich will nur mal wissen ob es vielleicht ein KeyWord gibt, mit dem man eine Variable (also Klasse) vereinbaren kann, ohne das sie zur Compilierzeit vorliegen muss!

Sprich

Code:
public class Otherclass
{
   private mainClass myClass = null;
   /// FUNKTIONEN
   public OtherClass(mainClass cl)
   {
      this.myClass = cl;
   }

   private void someFkt()
   {
      myClass.setState(true);
   }
}

Nur, die Klasse mainClass liegt nicht vor, weil ich das jar Paket eigentlich nur extern laden will (sprich nicht wirklich einbinde ins projekt)

Geht sowas überhaupt? Bzw, wie geht das?

MfG 😉
 
das geht nicht, alles was zu zur Übersetzungszeit verwenden willst, muss im Classpath sein

einzige Lösung wäre Reflection (via Class.forname die Klasse und dann Methoden dynamisch aufrufen)
 
Nur, die Klasse mainClass liegt nicht vor, weil ich das jar Paket eigentlich nur extern laden will (sprich nicht wirklich einbinde ins projekt)

Das ist doch totaler Käse, wenn du das jar Paket zur Laufzeit einbinden kannst, warum kannst du es dann nicht beim kompilieren reinhängen?
 
das ist kein Käse!

Weil nicht nur ich solche Packages erstellen soll/kann sondern jemand anderes auch, der aber die mainclass nicht hat, aber die Funktionen nutzen kann (wenn er das Programm mit dem anderen Konstruktor aufruft)


Und änder deinen Namen auf was kürzeres!
 
Weil nicht nur ich solche Packages erstellen soll/kann sondern jemand anderes auch, der aber die mainclass nicht hat, aber die Funktionen nutzen kann (wenn er das Programm mit dem anderen Konstruktor aufruft)
Niemand kann mit deinen Packages was anfangen, wenn er nicht die kompilierten Binaries hat (im allgemeinen ein jar-Archiv). Ich weiss zwar überhaupt nicht, was du meinst, aber mit Class.ForName und reflect Method invoke kannst du das machen
 
@the_29
Mammut hat wohl recht, der Compiler benötigt alle Infos um richtig zu funktionieren (Was ist wenn du ein Schreibfehler machst, der Compiler würde es nicht bemerken und dein Progi könnte starten... ziemlich gefährliche Sache).

@Mammut
Bitte etwas weniger aggressiv!
 
deswegen frage ich ja ob es irgendein schlüsselwort gibt, mit dem man solche Variablen vereinbaren kann!

das es einfach so net gehen ist klar und ist auch gut so 😉
 
thE_29 hat gesagt.:
deswegen frage ich ja ob es irgendein schlüsselwort gibt, mit dem man solche Variablen vereinbaren kann!

das es einfach so net gehen ist klar und ist auch gut so 😉

Was heisst schon Schlüsselwort, dazu gehört eine kleine Wissenschaft namens Reflection

Code:
       String klasse = "java.lang.String";
       String methode = "length";
       Class dynaclass = Class.forName(klasse);
       Constructor konst = dynaclass.getConstructor(new Class[]{String.class});
       Object dynaobject = konst.newInstance(new Object[]{"Hallo Welt"});
       Method dynameth = dynaclass.getMethod(methode,null);
       System.out.println(dynameth.invoke(dynaobject,null));
 
Das impliziert aber, dass du die Klasse schon im Klassenpfad....
Wenn nicht, musst du noch den Classloader setzten...
 
jo, mit reflection kenn ich mich eh aus 😉
meine meistens programme bauen auf, indem sie nicht wissen was ihr "kind" ist, nur hatten sie halt immer die imports, aber so könnte es gehen!

werd mich morgen rumspielen,jedenfalls bleiglanz danke für die Inspiration 😉 (weil so gehts net, kann ja net mainclass.class hinschreiben, würde er ja wieder mekkern!)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben