2016-01-28 24 views

回答

2

在FXMLLoader的源代碼有一個方法processAttribute(...)「uumh」處理屬性,如fx:idfx:controller等來驗證FX的代碼:id爲:

if (localName.equals(FX_ID_ATTRIBUTE)) 
{ 
    // Verify that ID is a valid identifier 
    if (value.equals(NULL_KEYWORD)) 
    { 
     throw constructLoadException("Invalid identifier."); 
    } 

    for (int i = 0, n = value.length(); i < n; i++) 
    { 
     if (!Character.isJavaIdentifierPart(value.charAt(i))) 
     { 
      throw constructLoadException("Invalid identifier."); 
     } 
    } 

    fx_id = value; 
} 

所以在fx:id每個字符是與Character.isJavaIdentifierPart()檢查。該

Character.isJavaIdentifierPart('$'); // returns true 
Character.isJavaIdentifierPart('>'); // returns false 

因此,使用>字符將拋出一個LoadException,而$不會。

有可能不存在有效的外匯文檔:ID名稱,但至少閱讀Character.isJavaIdentifierPart()的Javadoc會給你一些啓發。

+1

而且由於它具有被映射到使用@FXML註釋的Java字段,這是有道理的,如果你想想看。 – Puce