Announcement

Collapse
No announcement yet.

Klassenreferenztypen ("class of" in Delphi) in JAVA?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Klassenreferenztypen ("class of" in Delphi) in JAVA?

    Gibt es in JAVA Klassenreferenztypen ("class of") wie in Delphi?

    Hilfetext aus Delphi:

    ================================================== ==============

    Ein Konstruktor kann mit einer Variablen eines Klassenreferenztyps aufgerufen werden. Auf diese Weise können Objekte erstellt werden, deren Typ zur Compilierzeit nicht bekannt ist. Ein Beispiel:

    type TControlClass = class of TControl;

    function CreateControl(ControlClass: TControlClass;
    const ControlName: string; X, Y, W, H: Integer): TControl;
    begin
    Result := ControlClass.Create(MainForm);
    with Result do
    begin
    Parent := MainForm;
    Name := ControlName;
    SetBounds(X, Y, W, H);
    Visible := True;
    end;
    end;

    Der Funktion CreateControl wird eine Klassenreferenz als Parameter übergeben. Er bestimmt, welche Art von Steuerelement erstellt wird. Der Parameter wird anschließend beim Aufruf des Konstruktors verwendet. Da Klassentypbezeichner Klassenreferenzwerte enthalten, kann im Aufruf von CreateControl der Bezeichner der Klasse angegeben werden, um eine Instanz vor ihr zu erstellen:

    CreateControl(TEdit, 'Edit1', 10, 10, 100, 20);

    Konstruktoren, die mit Klassenreferenzen aufgerufen werden, sind normalerweise virtuell. Die entsprechende Implementierung wird anhand des beim Aufruf angegebenen Laufzeittyps aktiviert.

    ================================================== ======================

  • #2
    <CODE>
    public Object myFactory(Class c)<BR>
    throws IllegalAccessException, InstantiationException<BR>
    {<BR>
    return c.newInstance();<BR>
    }<BR>
    <BR>
    public Object myFactory(String c)<BR>
    throws IllegalAccessException, ClassNotFoundException,
    InstantiationException<BR>
    {<BR>
    return Class.forName(c).newInstance();<BR>
    }<BR>
    <BR>
    private void test()<BR>
    throws Exception<BR>
    {<BR>
    System.out.println(myFactory(String.class));<BR>
    System.out.println(myFactory("java.lang.String")); <BR>
    }<BR>
    </CODE>

    In Java ist "alles" virtuell. Im Beispiel muß die Klasse einen öffentlichen Leerkonstruktor anbieten. Anonsten kann auch über das Konstruktor-Array der Klasse gegangen werden. Bzw: Schau Dir mal das Reflection-API genauer an. Es ist wesentlich leistungsfähiger als Delphi.

    cu

    [email protected]

    Comment

    Working...
    X