gpt4 book ai didi

JAVA 从文本文件创建事件列表

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

我有一个 Controller 类,它基本上包含一个事件列表。

ArrayList <Event> eventList = new ArrayList<>();

Controller 有一个 addEvent(Event e) 方法。

我已将 Controller 类扩展为特定类型的 Controller ,并扩展了事件以作为内部类为我的新 Controller 提供特定类型的事件。

public class NewController extends Controller{
//.. controller code/methods
class SpecificEvent extends Event{
//..
}
}

我已经对 Controller 进行了硬编码,使其按我的预期工作,但我希望能够创建一个配置文件来填充我的事件列表。

我制作了一个包含事件列表的 .txt 文件:

Event=SpecificEvent, Arg1=<Integer>val, .. ArgN=<?>val, Event=SpecificEventN, ArgN=<?>val

我将事件类名称和参数过滤到列表中:

fileContents.stream()
.forEach(s -> {
Scanner sc = new Scanner(s)
.useDelimiter("=|,");
while (sc.hasNext()){
Scanner sc2 = new Scanner(sc.next()).useDelimiter("[//w]");
args.add(sc.next());
}
});

我的问题是事件具有不同的构造函数参数类型和长度;我不知道如何从我的文件构建它们。我对此类工作很陌生,我认为这是常规实现。

我使用 Reflect 包吗?请帮忙。我正在考虑建立一个事件工厂?

最佳答案

感谢社区的帮助。当提供字符串数组参数时,该工厂将完成这项工作,{String classname, args.... }

/**
* ClassFactory方法,构建一个事件。
*
* @param 参数 构建事件所需的参数。
* @return 内置事件。
* @抛出java.lang.ClassNotFoundException
*/

public Event buildEvent(String [] arguments) throws ClassNotFoundException {
Class<?>[] argumentTypes = {};
Object[] parameters = {};

try {
//define the class type from the first argument
Class<?> eventClass
= Class.forName(packageName + arguments[0]);
if (arguments.length() > 1) {
argumentTypes = new Class<?>[]{Long.TYPE};
parameters = new Object[]{Long.parseLong(arguments[1])};

Constructor<?> constructor
= eventClass.getDeclaredConstructor(argumentTypes);
Object instance = constructor.newInstance(parameters);
return ((Event) instance);
//default
} else {
Constructor<?> constructor
= eventClass.getDeclaredConstructor();
Object instance = constructor.newInstance();
return ((Event) instance);
}
} catch (ClassNotFoundException cnfe) {
System.out.println("Class not available in this package.");
} catch (NoSuchMethodException |
SecurityException |
InstantiationException |
IllegalAccessException |
IllegalArgumentException |
InvocationTargetException e) {
log.log(Level.SEVERE, "Class Builder: {0}", e.getMessage());
}
return null;
}

关于JAVA 从文本文件创建事件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30917798/

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