Java 将字段写入字节码不起作用
我正在用字节码编写一个类,但我对如何向类中添加字段感到困惑。我尝试过添加这样的字段Java 将字段写入字节码不起作用,java,field,bytecode,dynamic-programming,Java,Field,Bytecode,Dynamic Programming,我正在用字节码编写一个类,但我对如何向类中添加字段感到困惑。我尝试过添加这样的字段 dout.writeShort(1); dout.writeShort(Modifier.PUBLIC); dout.writeShort(stringConstant("hdhd")); dout.writeShort(stringConstant(classCode(int.class))); 但是当我尝试加载结果类时,我得到一个 线程“main”java.lang.ClassFormatError中出现异
dout.writeShort(1);
dout.writeShort(Modifier.PUBLIC);
dout.writeShort(stringConstant("hdhd"));
dout.writeShort(stringConstant(classCode(int.class)));
但是当我尝试加载结果类时,我得到一个
线程“main”java.lang.ClassFormatError中出现异常:类测试中的字段修饰符非法:0x1
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:791)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:634)
字节码测试$InterfaceClassLoader.buildInterface(BytecodeTest.java:139)
位于BytecodeTest.main(BytecodeTest.java:25)
我还应该提到,我试图构建的类是一个接口
我看不出公共修饰符有什么是无效的
这是我的类代码方法
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('.', '/');
}
私有静态字符串类代码(c类)
{
if(c==void.class)
返回“V”;
类arrayClass=Array.newInstance(c,0.getClass();
返回arrayClass.getName().substring(1).replace('.','/');
}
我的问题是接口需要最终字段,而我没有将字段设置为最终字段。因为它说您有非法的字段标志,所以您应该检查JVM规范中有关字段标志的部分。如果你有,你会看到的 接口的所有字段必须具有ACC_公共、ACC_静态和 设置ACC_最终标志;他们可以设置ACC_合成标志,并 不得设置表4.19中的任何其他标志 因此,解决方案是这样做(不确定您正在使用的库的确切语法)
dout.writeShort(Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL);