2012-05-28 80 views
3

我目前正在修改javac編譯器,以某種方式生成我們自己的編程語言。編譯中的Java默認修飾符

我們想擺脫Java的默認訪問修飾符,使沒有訪問修飾符的所有東西都公開。

但是到目前爲止,我還沒有成功找到Java編譯代碼在哪裏實現。我可以輕鬆添加到其中一個聲明階段,但這是一個我們不希望遇到的糟糕解決方案。

對此有何見解?

+0

對於接口,默認的修改器是公共的。我喜歡做的是將所有東西都設置爲私有的,或者將其封裝在本地,當我嘗試使用需要公開的東西時,讓IDE將該字段或方法作爲自動修復(我必須有權訪問源代碼才能執行此操作) –

+2

(我必須問:你爲什麼要改變這樣的語言?!) –

+1

我的大學的研究 – Adriano

回答

4

綜觀The class File Format,特別是部分4.5字段4.6方法我看到正在定義的以下常量:

ACC_PUBLIC  0x0001 
ACC_PRIVATE 0x0002 
ACC_PROTECTED 0x0004 

然而,一個特定的方法(字段)一類的可最多隻有一個ACC_PRIVATE,ACC_PROTECTED和ACC_PUBLIC標誌被設置(JLS §8.3.1)。

由於沒有ACC_DEFAULT標誌和文檔在一個說:(不只有一個)我猜想,都沒有標誌意味着默認訪問。

+0

那麼,我們可以假設沒有真正的歸因,這隻能由jvm處理? – Adriano

+0

@Adriano:修飾符*存儲在'.class'文件中,JVM讀取它們。我只是猜測沒有'ACC_'修飾符表示默認修飾符。 –