2013-06-11 38 views
3

偶然我正在使用反射來解碼某些用戶字符串條目,它可能在某些情況下是一個簡單的整數數字(0-9),其他時間可能是對其他類方法的調用。

在檢查字符串輸入userInput,看是否有該名稱的類存在:

Class<?> c = Class.forName(this.getClass().getName() + "$" + userInput); 

和我的驚訝,當用戶輸入「1」或「2」 Class.forName()的確發現一類具有該名稱。這可能是基本的Java,請原諒我問:這些類是什麼? 我跟着調試器的代碼,並檢查其他數字,只有1和2似乎被定義。

回答

6

那些是匿名的內部類。例如:

public class Foo { 
    public static void bar() { 
     Runnable runnable = new Runnable() { 
      @Override public void run() {} 
     }; 
    } 
} 

這將創建一個類Foo$1它實現Runnable

6

他們是匿名內部類。

如果您的.java文件具有內部/嵌套類,則編譯後的文件將由編譯器生成爲TheClass$xxx.class文件。

有關更多信息,請參見this link

內部類定義產生附加的類文件。這些類 文件具有組合內部和外部類名稱的名稱,如 MyClass $ MyInnerClass.class。

1

美元符號被編譯器用於內部類。

$符號代表內部類。如果它在$之後有一個數字,那麼它是一個匿名內部類。如果在$之後有一個名字,那麼它只是一個內部類。

相關問題