【发布时间】:2013-05-29 21:10:59
【问题描述】:
我正在用字节码编写一个类,但我对如何向类添加字段感到困惑。我试过添加这样的字段
dout.writeShort(1);
dout.writeShort(Modifier.PUBLIC);
dout.writeShort(stringConstant("hdhd"));
dout.writeShort(stringConstant(classCode(int.class)));
但是当我尝试加载生成的类时,我得到了一个
线程“主”java.lang.ClassFormatError 中的异常:类测试中的非法字段修饰符:0x1 在 java.lang.ClassLoader.defineClass1(本机方法) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:791) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:634) 在 BytecodeTest$InterfaceClassLoader.buildInterface(BytecodeTest.java:139) 在 BytecodeTest.main(BytecodeTest.java:25)
我还应该提到我正在尝试构建的类是一个接口。
我看不出 public 修饰符有什么无效的地方。
这是我的 classCode 方法
private static String classCode(Class<?> c)
{
if (c == void.class)
return "V";
Class<?> arrayClass = Array.newInstance(c, 0).getClass();
return arrayClass.getName().substring(1).replace('.', '/');
}
我的问题是接口需要 final 字段,而我没有将字段设为 final。
【问题讨论】:
标签: java field bytecode dynamic-programming