Hallo,
Ich habe in meinen Programm sehr viele unterschiedliche Actionklassen. Diese werden aktuell an vielen Stellen instantiiert. Viele dieser Klasse 'horchen' über einen SelectionListener was so in der Applikationswelt passiert um passend reagieren zu können. Um zu viele Abbonenten des Selektionsdienstes zu vermeiden (und performance zu sparen) habe ich eine zentrale 'ApplicationActionFactory' Klasse als Singelton geschrieben.
Men Problem beginnt an der Stelle 'wenn es die Action noch nicht gibt wird sie angelegt und in ActionInfo gespeichert.'.
Ich möchte ein Objekt vom Typ 'actionType' erstellen. Dabei weiß ich nur, das alle Actions über identische Konstruktoren verfügen.
ein Simples
hat es leider nicht gebracht.
Wie kann ich zur Laufzeit Objekte einer Klasse erstellen deren Typ ich ebenfalls erst zur Laufzeit erfahre??
Ich habe in meinen Programm sehr viele unterschiedliche Actionklassen. Diese werden aktuell an vielen Stellen instantiiert. Viele dieser Klasse 'horchen' über einen SelectionListener was so in der Applikationswelt passiert um passend reagieren zu können. Um zu viele Abbonenten des Selektionsdienstes zu vermeiden (und performance zu sparen) habe ich eine zentrale 'ApplicationActionFactory' Klasse als Singelton geschrieben.
Code:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.action.Action;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
public class ApplicationActionFactory {
private static ApplicationActionFactory INSTANCE;
private IWorkbenchWindow window;
private List<ActionInfo> actionList;
private class ActionInfo{
BasicImageSize size = null;
Action action = null;
public ActionInfo(Action action, BasicImageSize size){
this.action = action;
this.size = size;
}
public BasicImageSize getSize(){
return size;
}
public Action getAction(){
return action;
}
public void setSize(BasicImageSize size){
this.size = size;
}
public void setAction(Action action){
this.action = action;
}
}
// Singelton!!
private ApplicationActionFactory(){
window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
actionList = new ArrayList<ActionInfo>(10);
}
public ApplicationActionFactory getInstance(){
if (INSTANCE == null){
INSTANCE = new ApplicationActionFactory();
}
return INSTANCE;
}
public Action getAction(Class actionType, BasicImageSize imageSize ){
// prüfen ob es die gewünschte Action bereits gibt
for (Iterator iter = actionList.iterator(); iter.hasNext();) {
ActionInfo element = (ActionInfo) iter.next();
if ((element.getAction().getClass() == actionType) && (element.getSize() == imageSize)){
return element.getAction();
}
}
// wenn es die Action noch nicht gibt wird sie angelegt und in ActionInfo gespeichert.
// Was hier???
return null;
}
}
Men Problem beginnt an der Stelle 'wenn es die Action noch nicht gibt wird sie angelegt und in ActionInfo gespeichert.'.
Ich möchte ein Objekt vom Typ 'actionType' erstellen. Dabei weiß ich nur, das alle Actions über identische Konstruktoren verfügen.
ein Simples
Code:
Action newAction = new Class<actionType>(par1, par1)
Wie kann ich zur Laufzeit Objekte einer Klasse erstellen deren Typ ich ebenfalls erst zur Laufzeit erfahre??