gpt4 book ai didi

java - 如何通过字符串类名在GWT中创建新对象?

转载 作者:行者123 更新时间:2023-12-02 05:49:24 28 4
gpt4 key购买 nike

我的目标是创建一个灵活的应用程序 -> 扩展我的 Web 应用程序的功能,我只需向数据库添加一个位置并将缺少的类上传到服务器。

我在 Java-GWT 中创建了动态菜单。我使用 MenuBar() 和循环,所有位置均取自 db (数组,字符串)。当然,菜单中的“结束选项”必须执行某些操作,通常单击应用程序后将打开,即带有按钮、标签、文本区域的 FlowPanel。

我的想法是:使用java反射为菜单中的所有位置添加命令。每个命令都采用选项名称(字符串),名称相同,例如类名 -> next,单击后我将自动创建对象。不幸的是,Java Reflection 不能与 GWT 一起使用,因此这种方式是不可能的。

我的问题是:

当我在字符串中有类名时,如何创建对象?或者,如果我的想法是错误的,也许还有其他方法来创建灵活的菜单/程序?

最佳答案

我想,我找到了这个问题的一个小解决方案,但是有另一个概念 - 只有一个类(和一个接口(interface));在这个类(class)中,我有一个主要方法,它选择正确的“打开方法”;在此示例中,我通过 int 检查:

/-------------------------------------------------------- /程序主要部分的循环示例:/--------------------------------------------------------/(...)

MenuBar menu = new MenuBar(true);

for (int k = 0; k < 5; k++) {
int ii=k;
menu.addItem(tekst + k, new Command() {

@Override
public void execute() {
ClassMetodInterface metoda = (ClassMetodInterface) GWT.create(Method2.class);
vPanel.clear(); //clearing before I open a new widget.

/*I sent int (easier to tests), but I can sent string[i] too*/
/* logging - instance of main class to communicate with 'subclasses', in my project necessery*/

vPanel.add(metoda.defaultMethod(ii, logging));
}

});
}
(...)
/*-------------------------------------------*/
ClassMetodInterface, only for implementation class Method2 :
/*-------------------------------------------*/
public interface ClassMetodInterface {
Widget defaultMethod(int g, Logging logging);
}

/*-------------------------------------------*/
class Method2 with swich:
/*-------------------------------------------*/


public class Method2 implements ClassMetodInterface {

public Widget zapisUsera(int g, Logging logging) {

Logging logging;
HorizontalPanel lPanel = new HorizontalPanel();

switch(g) {
case 1: {
Window.alert("switch for test no:"+g);
MenuWindow1(logging);

break;

}
case 2:{
Window.alert("switch for test no:"+g);
break;
}
default:
Window.alert("switch default - loop >2 && <1");
break;
}
return lPanel; //all methods will be void - they will be add widgets and Panels to lPanel

}

public Widget MenuWindow1(Logging logging) {
this.logging = logging;

lPanel.setBorderWidth(2);
this.lPanel.setPixelSize(100, 50);
Button b1 = new Button("test button, not used");
lPanel.add(b1);

Label lbl = new Label("label no "+logging.i);

lPanel.add(lbl);
Button addGlobal = new Button("+");
Button removeGlobal = new Button("-");
lPanel.add(addGlobal);
addGlobal.addClickHandler(new addGlobal());
removeGlobal.addClickHandler(new removeGlobal());
lPanel.add(removeGlobal);


return lPanel;

}

//for tests communication with class, where I have menu and global variable
public class addGlobal implements ClickHandler {

@Override
public void onClick(ClickEvent event) {
logging.i++;
}

}

public class removeGlobal implements ClickHandler {

@Override
public void onClick(ClickEvent event) {
logging.i--;
}

}
}

尚未完成,但您可以展示主要思想。如果我需要向菜单添加新选项,我将更新数据库并用更多方法替换版本中的一个类。

关于java - 如何通过字符串类名在GWT中创建新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56064264/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com