我正在用字节码编写一个类,但我对如何向类添加字段感到困惑。我试过添加这样的字段
dout.writeShort(1);
dout.writeShort(Modifier.PUBLIC);
dout.writeShort(stringConstant("hdhd"));
dout.writeShort(stringConstant(classCode(int.class)));
但是当我尝试加载生成的类时,我得到一个
线程“主”java.lang.ClassFormatError 中的异常:类测试中的非法字段修饰符:java.lang.ClassLoader.defineClass1(Native Method)处的 java.lang.ClassLoader.defineClass(ClassLoader.java:791)处的 0x1。 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('.', '/');
}
我的问题是接口需要最终字段,而我没有将字段设为最终字段。