首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

EMF 介紹系列(三):定制應用程式的基本方法與 @generated 機制

     編輯:Java 相關知識

EMF 生成的三大專案結構

  • 模型專案(com.my.shop):介面、實作類(Product/ProductImpl)、工廠(ShopFactory)、Package(ShopPackage)、AdapterFactory、Switch。
  • .edit 專案:ItemProvider 系列,實作 JFace Provider 介面,供 Viewer 顯示模型。
  • 編輯器專案:UI 類別,示範如何使用前兩專案,亦可作為自訂編輯器基礎。

定制途徑一:修改 ecore/genmodel 模型屬性

例:將 NamedElement.name 預設值從 null 改為 "(Unnamed)"。

  1. 在類圖修改屬性的 Default Value Literal。
  2. 右鍵 .genmodel 選 Reload 同步變更。
  3. 重新生成代碼。

genmodel 控制生成細節(專案 ID、套件名、類前綴、圖示、屬性分類等),ecore 定義領域結構。

定制途徑二:直接修改生成代碼(核心技巧:@generated)

JET 生成器依據代碼前的 Javadoc 判斷是否覆蓋:

  • 含 @generated → 重新生成時覆蓋。
  • 無 @generated 或改為 @generated NOT → 保留手動修改。

範例 1:修改預設值常數

// 修改前
protected static final String NAME_EDEFAULT = null;
// 修改後(並將 @generated 改為 @generated NOT)
protected static final String NAME_EDEFAULT = "(Unnamed)";

範例 2:在 getPrice() 注入業務邏輯

/** @generated NOT */
public double getPrice() {
    if (price >= 100) return price * 0.95; // 九五折
    if (price < 5) return 5d;              // 低於 5 元按 5 元算
    return price;
}

最佳實務建議

  • 能透過模型屬性解決的,優先用模型屬性(思路清晰、易維護)。
  • 複雜業務邏輯需修改代碼時,務必更新 Javadoc 標記(建議統一用 @generated NOT),並加上說明註解。
  • 定期備份手動修改的代碼段,防止誤觸發重新生成造成遺失。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved