2013-05-13 47 views
0

我在类org.jfree.data.time.RegularTimePeriod中看到了一些合成字段,并且不知道它们是什么以及用于什么。我用这个代码来将它们找出来:类型为“java.lang.Class”的java中的合成静态字段

for (Field f : RegularTimePeriod.class.getDeclaredFields()) 
    if (f.isSynthetic()) System.out.println(f); 

,它会给这些:

static java.lang.Class org.jfree.data.time.RegularTimePeriod.class$java$util$Date 
static java.lang.Class org.jfree.data.time.RegularTimePeriod.class$java$util$TimeZone 
static java.lang.Class org.jfree.data.time.RegularTimePeriod.class$org$jfree$data$time$Year 
static java.lang.Class org.jfree.data.time.RegularTimePeriod.class$org$jfree$data$time$Quarter 
static java.lang.Class org.jfree.data.time.RegularTimePeriod.class$org$jfree$data$time$Month 
static java.lang.Class org.jfree.data.time.RegularTimePeriod.class$org$jfree$data$time$Day 
static java.lang.Class org.jfree.data.time.RegularTimePeriod.class$org$jfree$data$time$Hour 
static java.lang.Class org.jfree.data.time.RegularTimePeriod.class$org$jfree$data$time$Minute 
static java.lang.Class org.jfree.data.time.RegularTimePeriod.class$org$jfree$data$time$Second 
static java.lang.Class org.jfree.data.time.RegularTimePeriod.class$org$jfree$data$time$Millisecond 

任何身体有什么想法?我只是好奇:)谢谢。

+1

您是在寻找http://stackoverflow.com/questions/399546/synthetic-class-in-java? – 2013-05-13 08:28:03

+0

另请参见:[如何在java中创建合成域?](http://stackoverflow.com/questions/3298130/how-to-create-synthetic-fields-in-java) – assylias 2013-05-13 08:35:54

回答

1

据我所知,synthetic members are only meant to be accessed by trusted code generated by the compiler, not haphazardly by reflection.

编译器合成,以实现名称的作用域一定的隐藏字段和方法。除非另有说明,否则这些字段是私人的,或者它们至多是包装范围。

指向最外层封闭实例的合成域名为this$0。下一个最外面的封闭实例是this$1,等等。 (在任何给定的内部类中至多需要一个这样的字段。)包含常数v的副本的合成字段被命名为val$v。这些字段是final

所有这些综合字段都由构造函数参数初始化,这些参数与它们初始化的字段名称相同。如果其中一个参数是最内层的封闭实例,那么它是第一个。所有这些构造参数都被认为是合成的。如果编译器确定合成字段的值仅用于构造函数的代码中,则可能会省略该字段本身,并仅使用该参数来实现变量引用。

授予访问私有成员或构造函数的非私有最终合成方法的名称为access $ N,其中N是十进制数字。这种访问协议的组织是未指定的。

我希望这会有所帮助。

干杯

+1

引用[your源(http://tns-www.lcs.mit.edu/manuals/java-1.1.1/guide/innerclasses/spec/innerclasses.doc10.html)。 – assylias 2013-05-13 08:31:26

+0

谢谢,会做。 :) – 2013-05-13 08:41:51