我在org.jfree.data.time.RegularTimePeriod类中看到了一些合成域,并不知道它们是什么和用来做什么。我使用下面的代码来找出它们:
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有谁知道吗?我只是好奇:)谢谢。
发布于 2013-05-13 16:30:09
据我所知,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是十进制数。这种访问协议的组织未指定。
我希望这能帮到你。
干杯
https://stackoverflow.com/questions/16517652
复制相似问题