2011-01-09 16 views
0

Es gibt eine Super-Klasse, A, und es gibt viele Unterklassen, B, C, D ... Menschen können mehr Unterklassen schreiben. Jede Klasse hat die Methode dostuff(), jede ist in irgendeiner Weise anders.Objekt eine Klasse von Objekten in Java

Ich möchte ein Objekt, das jedes Objekt konstruiert, die zu A oder einer seiner Unterklasse gehören.

Zum Beispiel kann ich den Namen der Unterklasse oder ein Objekt dieser Klasse übergeben, und es wird ein anderes Objekt der Klasse erstellen.

Natürlich kann ich

A construct(A var){ 
    stuff = var.dostuff(); 
    domorestuff(stuff) 
    return new A(stuff); 
} 

B construct(B var){ 
    stuff = var.dostuff(); 
    domorestuff(stuff) 
    return new B(stuff); 
} 

C construct(C var){ 
    stuff = var.dostuff(); 
    domorestuff(stuff) 
    return new C(stuff); 
} 

schreiben, aber das ist nicht effizient. Ich muss jedes Mal ein paar neue Zeilen schreiben, wenn ich eine neue Unterklasse mache.

Es scheint, dass ich auch keine Generika verwenden kann. Weil ich dostuff() nicht für Objekte verwenden kann, die nicht in einer Unterklasse von A sind.

Was soll ich in dieser Situation tun?

Antwort

1

Sie können Reflexion verwenden.

Möglicherweise müssen Sie Ausnahmen auslösen und abfangen, aber das ist die Grundidee.

+0

Das ist großartig. Was, wenn ich den Konstruktor von t verwenden möchte? –

+0

Das verwendet den Standardkonstruktor. Wenn Sie einen anderen Konstruktor verwenden möchten, müssen Sie getConstructor() verwenden –

1

Sie sollten das Fabrikmuster implementieren. Ihre Implementierung wird Class.forName(className) verwenden.

public A create(String className) throws Exception { 
    return Class.forName(className).newInstance(); 
} 
Verwandte Themen