【发布时间】:2017-05-27 13:02:54
【问题描述】:
GreenDAO 正在其生成的类中搜索名称中包含“m”前缀的 getter 和 setter。
例如,我已将实体设置为不生成任何 getter 和 setter,但它仍然会为我的 private Date mDate 寻找 getMDate(),而不是手动创建的 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 注释中禁用了getter 和setter 的生成,并将我自己的放入其中。当我使用 alt+enter 为我的每个字段创建 getter 和 setter 时,我已设置 Android Studio 以考虑“m”。
public Date getMDate() {
return mDate;
}
public void setMDate(Date mDate) {
this.mDate = mDate;
}
这是 greenDAO 在给定字段private Date mDate 的情况下为我的代码生成的getter 和setter 示例。这违反了代码样式准则,因为局部变量包含“m”前缀,并且方法名称也包含它(可能有点挑剔,但您可以设置 Android Studio,使其不不要做让我觉得不应该那样的事情)。
有了我的 getter 和 setter,greenDAO 仍然认为 getter 和 setter 丢失了,这导致它们被添加了两次。一次是我放入的,另一个是您在上面看到的。这也会导致生成下面的代码。
@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 和 setter 的名称(getMDate() 而不是 getDate()) .我无法更改此代码,因为它只是在我下次构建项目时切换回来,这是我的问题。
我的问题是:如何让 greenDAO 在生成代码时考虑“m”前缀并让它使用我自己设置的 getter 和 setter?或者甚至让它在名称和局部变量中不包含“m”的情况下自行生成 getter 和 setter?
【问题讨论】:
-
对非静态和非公共字段使用
m前缀是标准的。 -
@Gala 是的,这就是我正在做的事情。我看不到你的意思
-
我们所有人都无法理解您的问题。您要归档什么?
-
@Gala 我很快就会用代码更新我的问题
-
@Gala 抱歉,如果我之前遇到困难。希望添加的代码和对它的解释有助于理解我的观点。