gpt4 book ai didi

javassist : cannot parse method body with parameterized Maps/Lists

转载 作者:行者123 更新时间:2023-12-01 11:21:18 24 4
gpt4 key购买 nike

我正在尝试在应用程序中动态生成类,但遇到了此限制/错误?使用javassist。

如果 javassist 具有带有参数化类型的 Maps/List,则似乎 javassist 无法解析源体。

例如:

public static void main( String[] args ) throws Exception
{
ClassPool pool = ClassPool.getDefault();

CtClass evalClass = pool.makeClass("Eval");

evalClass.addMethod(
CtNewMethod.make("public void test () { java.util.Map<java.lang.String, java.lang.String> tmp=null; }", evalClass));


Class clazz = evalClass.toClass();
Object obj = clazz.newInstance();

Class[] formalParams = new Class[] { };
Method meth = clazz.getDeclaredMethod("test", formalParams);
Object[] actualParams = new Object[] { };
meth.invoke(obj, actualParams);


}

这将给出错误

Exception in thread "main" javassist.CannotCompileException: [source error] ; is missing at javassist.CtNewMethod.make(CtNewMethod.java:78) at javassist.CtNewMethod.make(CtNewMethod.java:44)

但是当我将正文更改为

public void test () { java.util.Map tmp=null; }

效果很好。同样适用于“列表”。

有什么建议吗?这是限制还是错误?

最佳答案

正如您可以在 section 4.7 from Javassist tutorial 中读到的那样Javassist 的局限性之一是不支持 J2SE 5.0 中引入的新语法(包括枚举和泛型)。为了供将来引用,同时,javassist 版本为 3.20,此信息可能会在未来版本中更改。

此限制仅在您使用高级 API 编写代码时有效,如果您使用低级 API(直接编写字节码的 API),则可以使用SignatureAttribute 来使用泛型。 。有关更多信息,请查看我在 Javassist: creating an interface that extends another interface with generics 中给出的答案

关于javassist : cannot parse method body with parameterized Maps/Lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31200053/

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