2013-05-13 67 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