如何在java中创建合成字段?

MRa*_*ser 9 java reflection

  1. 如何在Java中创建合成字段?

  2. java中的合成字段只能在运行时创建吗?如果不是:在编译时是否有符合标准的方法(不更改类文件中的某些字节)

Jon*_*eet 15

它们是由编译器在语言的"奇怪"需要时创建的.一个简单的例子是使用内部类:

public class Test
{
    class Inner
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

Test.Inner类将有一个合成的字段来表示的相应实例Test的类.

我们可以稍微扩展此代码以显示该字段:

import java.lang.reflect.*;

public class Test
{
    public static void main(String[] args)
    {
        for (Field field : Inner.class.getDeclaredFields())
        {
            System.out.println(field.getName() + ": " + field.isSynthetic());
        }
    }

    class Inner
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

使用我的编译器,打印:

this$0: true
Run Code Online (Sandbox Code Playgroud)