2014-04-08 146 views
0

我需要解析Java類的屬性類型並支持點表示法。有沒有可以做到這一點的圖書館?我正在尋找的方法的簽名將如下所示:用點符號解決類屬性類型

getPropertyType(Person.class, "job.phone.areaCode"); 

回答

0

您可以使用反射來完成此操作。下面的代碼基本上使用反射API中的方法'getDeclaredField'來檢索所需字段的類型。它通過點符號字段名稱的點進行導航。

public static Class<?> getPropertyType(Class<?> clazz, String fieldName) { 
    final String[] fieldNames = fieldName.split("\\.", -1); 
    //if using dot notation to navigate for classes 
    if (fieldNames.length > 1) { 
     final String firstProperty = fieldNames[0]; 
     final String otherProperties = 
      StringUtils.join(fieldNames, '.', 1, fieldNames.length); 
     final Class<?> firstPropertyType = getPropertyType(clazz, firstProperty); 
     return getPropertyType(firstPropertyType, otherProperties); 
    } 

    try { 
     return clazz.getDeclaredField(fieldName).getType(); 
    } catch (final NoSuchFieldException e) { 
     if (!clazz.equals(Object.class)) { 
      return getPropertyType(clazz.getSuperclass(), fieldName); 
     } 
     throw new IllegalStateException(e); 
    } 
} 
+0

儘管此代碼可能會幫助解決問題, 提供附加的內容關於_why_和/或_how_它 回答了這個問題會顯著提高其 長期價值。請[編輯]你的答案,添加一些 的解釋。 –

+0

更好的方法是使用類的getter方法,而不是直接訪問該字段。 – marcosalpereira