gpt4 book ai didi

java - 反射:创建实例-java

转载 作者:太空宇宙 更新时间:2023-11-04 13:20:29 28 4
gpt4 key购买 nike

我正在尝试构建一个动态 GUI。

我有以下类(class):

Public abstract  class Property
String ip1;
int port;

并且从该类创建了很多子类,例如以下两个:

public   class PropertyDns extends Property
string ip2;
int port2;

Public class PropretyNetBios extends Property
long time;

目标: 用户选择子属性之一,然后我想显示他需要填写的字段以创建实例。 例如:如果他选择了 PropertyDns 我将呈现: “ip1:____ 端口1:______ ip2:_______ 端口2:______”当他完成时,他将按“确定”,然后我想使用他选择的值创建此类的实例。

有什么办法可以实现吗?

我设法使用反射来呈现字段:

    Field[] s1=p.getClass().getSuperclass().getDeclaredFields();  
Field[] s=p.getClass().getDeclaredFields();
for (int i = 0; i < s.length; i++) {
ans[i]=s[i].getName();
}

但我认为做得不好。

最佳答案

无需使用反射,通过在 Property 类中定义基本行为,您可以从一组已知的变量中枚举表单元素。

如果您特别想使用反射,我建议您先创建一个基本的工作示例,然后在遇到困难时寻求帮助。

abstract class Property {

abstract Map<String, String> getPropertyNames();

abstract void mapProperties(Map<String, String> userInput);

}

class Ip extends Property {

private String ip;
private String port;

public String getIp() {
return this.ip;
}

public int getPort() {
return Integer.parseInt(this.port);
}

Map<String, String> getPropertyNames() {
Map<String, String> names = new HashMap<>();
names.put("ip", "IP Address");
names.put("port", "Port");
}

void mapProperties(Map<String, String> userInput) {
for (Map.Entry<String, String> entry : userInput.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();

if ("ip".equals(key)) {
this.ip = value;
} else if ("port".equals(key)) {
this.port = value;
}
}
}
}

图形用户界面

class GUI {

// psuedo code ahead, warning...

buildForm() {


Property p = Property.getInstance(userSelectedType);
Map m = p.getPropertyNames();
for (entry in map) {
// build input type
// add listener to set values
}
}

void save() {
// run through user input map
// call p.mapProperties(userInputMap);
}
}

注意,我在 SO 编辑器中输入此内容,而不是 IDE,它不会编译

关于java - 反射:创建实例-java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33109337/

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