gpt4 book ai didi

java - 从字符串构造实例并返回它们的类型的方法?

转载 作者:行者123 更新时间:2023-11-30 09:27:53 25 4
gpt4 key购买 nike

给定两个类 AB,它们具有单参数构造函数和二元函数 f,我需要解析以下形式的字符串

"f(A(10), B(20))"
"f(A(2), A(3))"

创建适当的实例并调用相应的函数:

class Functions {
public static double f(A a1, A a2);
public static double f(A a, B b);
public static double f(B b1, B b2);
// ...
}

所以我正在寻找的是一种方法

T createInstanceFromString(String desc);

从“A(10)”或“B(20)”等字符串创建实例。当然,不幸的是,这在 Java 中是不可能的。

非常感谢有关此问题解决方案的任何建议。

编辑:我忘了提到可能有大量不同的类 ABC等和大量函数f,g等我想用createInstanceFromString把解析和调用分开,否则必须为每个函数调用分别进行条件解析,这会带来大量代码重复。

Edit2:问题不在于如何解析,而在于如何解析并返回一个通用方法/工厂/其他中的实例。

最佳答案

您需要标记字符串。(如果它总是以 f( 开头并以 ) 结尾,您可以删除这些部分,让您的生活更轻松)。

A(4) -> 找到类名 -> A -> 找到参数 -> 4

这是这样做的(伪java代码):

public static Object createClass(String className, Double value){
Class a = Class.forName(className);
Class[] params = new Class[]{Integer.class};
Constructor c = a.getConstructor(params);
Object[] values = new Object[]{value};
return c.newInstance();
}

也许,这个赞有帮助:http://docs.oracle.com/javase/tutorial/reflect/member/ctorInstance.html

更新这就像写一个编译器。如果您阅读有关如何编写编译器的内容,您可以获得更多信息:http://en.wikipedia.org/wiki/Compiler

更新 2将所有生成的实例放入一个数组中。现在您可以使用反射 API 获得正确的方法 f。代码将类似于

http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getDeclaredMethod(java.lang.String , java.lang.Class...)

Object[] values ...
Class[] classes ...
for(Object o: values){
add o.getClass() to classes
}

Method f = Functions.getClass().getDeclaredMethods("f", classes);
f.invoke(values);

关于java - 从字符串构造实例并返回它们的类型的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14298450/

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