GreenDAO正在使用" m"来搜索getter和setter。名称包含在其生成的类中的名称中。
例如,我已将实体设置为不生成任何getter和setter但它仍然会查找getMDate()
,而不是my 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
注释中禁用了getter和setter的生成,并将其自己放在那里。我已经设置了Android Studio来接受&#34; m&#34;当我使用alt + enter为我的每个字段创建getter和setter时考虑到这一点。
public Date getMDate() {
return mDate;
}
public void setMDate(Date mDate) {
this.mDate = mDate;
}
以下是greenDAO在给定字段private Date mDate
的情况下为我的代码生成的getter和setter的示例。这打破了代码风格的指导原则,因为局部变量包括&#34; m&#34;前缀以及方法名称也包括它(可能有一点挑剔,但你可以设置Android Studio,所以它不会这样做,这让我认为它不应该像这一点)。
有了我的吸气剂和二传手,greenDAO仍然认为吸气剂和固定剂丢失了,这导致它们被添加两次。有一次是我放入的,另一种是你在上面看到的。这也导致生成下面的代码。
@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
中的一些代码。它仍然使用getter(以及setter)的名称,如果我没有,它将用它来生成自己的getter和setter(getMDate()
而不是getDate()
)在Day
实体类上禁用它们的生成。我无法更改此代码,因为它只是在下次构建项目时切换回来,并且存在我的问题。
我的问题是:如何让greenDAO参加&#34; m&#34;在生成代码并让它使用我自己设置的getter和setter时,会考虑前缀吗?甚至可以让它在没有&#34; m&#34;的情况下自己生成getter和setter。被包含在名称和局部变量中?
答案 0 :(得分:0)
我决定使用的解决方案最终令人失望。
它只涉及使我的所有属性public
而不是private
。仍然符合代码样式,这些属性将不再使用m
前缀...或任何前缀。这不是一个非常令人满意的解决方案,因为现在可以直接访问和设置我的数据,只是为了符合简单的命名约定。
我(个人)不同意人们说使用命名约定会损害可读性。如果您足够好地构建代码并在Javadoc注释等中提供足够的描述,那么您将确切地知道正在做什么。话虽如此,如果使用约定将在上面的问题中创建这样的代码,那么我想这是一种情况,并且有理由不在我的其他项目中使用代码样式并且仍然坚持访问我想要的数据。