2017-05-27 75 views
0

GreenDAO正在搜索其生成的類中名稱中包含「m」前綴的getter和setter。如何從greenDAO生成的getters和setters中刪除「m」前綴?

例如,我設置的實體不會產生任何的getter和setter,但它仍然看起來對,讓我們說,getMDate()private Date mDate,而不是我的手動創建getDate()方法。二傳手同樣如此。

這只是打破了我遵守Android Code Style Guidelines

有什麼辦法可以配置greenDAO來使用我在Android Studio中生成的代碼樣式標準嗎?


編輯:只是爲了讓事情更清晰,我已經添加了一些代碼來了解我的點。我寫了上面的問題,因爲在嘗試工作的時候因慢性乾燥症而停止使用抗組胺劑,只是想睡覺,所以如果它不夠用,我表示歉意。

@Entity(generateConstructors = false, generateGettersSetters = false) 
public class Day { 

    @Id 
    private long mId; 

    @Unique 
    @NotNull 
    private Date mDate; 

    @ToMany(referencedJoinProperty = "mDayId") 
    private List<Goal> mGoals; 

    public Day(long id) { 
     this.mId = id; 

     mGoals = new ArrayList<Goal>(); 
    } 

    public Day(long id, Date date) { 
     this.mId = id; 
     this.mDate = date; 
    } 

    public long getId() { 
     return mId; 
    } 

    public void setId(long id) { 
     mId = id; 
    } 

    public Date getDate() { 
     return mDate; 
    } 

    public void setDate(Date date) { 
     mDate = date; 
    } 

    public List<Goal> getGoals() { 
     return mGoals; 
    } 

    public void setGoals(List<Goal> goals) { 
     mGoals = goals; 
    } 
} 

以上是我的Day類。正如你所看到的,我已經禁止了@Entity註釋中的獲取者和設置者的生成,並將我自己放在那裏。當我使用alt + enter爲每個字段創建getter和setter時,我已經設置了Android Studio以考慮「m」。

public Date getMDate() { 
    return mDate; 
} 

public void setMDate(Date mDate) { 
    this.mDate = mDate; 
} 

這裏是getter和setter該greenDAO產生用於給定的字段private Date mDate我的代碼的一個例子。這是打破了代碼風格的指導方針,因爲局部變量包含「m」前綴,並且方法名也包含它(可能有點挑剔,但是您可以設置Android Studio,不要這樣做,這讓我覺得它不應該這樣)。

隨着我的getters和setters那裏,greenDAO仍然認爲getters和setters缺失,導致他們被添加兩次。一次是我放入的那個,另一個是你上面看到的。這也會導致下面的代碼生成。

@Override 
protected final void bindValues(DatabaseStatement stmt, Day entity) { 
    stmt.clearBindings(); 
    stmt.bindLong(1, entity.getMId()); 
    stmt.bindLong(2, entity.getMDate().getTime()); 
} 

@Override 
protected final void bindValues(SQLiteStatement stmt, Day entity) { 
    stmt.clearBindings(); 
    stmt.bindLong(1, entity.getMId()); 
    stmt.bindLong(2, entity.getMDate().getTime()); 
} 

下面是一些從由greenDAO生成的類DayDao的代碼。如果我沒有在Day實體類上禁用它們的生成,它仍然使用它將用於生成它自己的getter和setters(getMDate()而不是getDate())的getter(和setters)的名稱。我無法更改此代碼,因爲它只是在我下次構建項目時切換回來,並且存在我的問題。

我的問題是:如何讓greenDAO在生成其代碼時考慮到「m」前綴事項,並讓它使用我自己設定的getter和setter?甚至可以讓它自己生成getter和setter,而不在名稱和局部變量中包含「m」?

+0

對於非靜態和非公開的字段使用「m」前綴是標準的。 – Gala

+0

@加拉是啊,那就是我正在做的。我看不到你的觀點 –

+0

我們所有人都不明白你的問題。你想要存檔什麼? – Gala

回答

0

我決定使用的解決方案最終變得相當令人失望。

它涉及只是使我的物業全部public而不是private。仍然符合代碼風格,這些屬性將不再使用m前綴...或任何前綴,就此而言。這不是一個非常令人滿意的解決方案,因爲現在我的數據可以直接訪問和設置,只需要簡單的命名約定即可符合。

我(個人)不同意人們說使用命名約定會傷害可讀性。如果你足夠好地構建你的代碼,並且在Javadoc評論等中提供足夠的描述,你就會知道到底在做什麼。話雖如此,如果使用慣例會創建如上面我的問題那樣的代碼,那麼我認爲這是它的一種情況,也是在我的其他項目中不使用代碼樣式並仍然堅持使用訪問我想要的數據。