Android/Java漂亮的代码演示

Android/Java漂亮的代码演示,java,android,indentation,human-readable,Java,Android,Indentation,Human Readable,我正在开发一款完美的Android CRUD,有尽可能多的选项 它的目的是开源和共享 所以,我试图得到一个好的、缩进的、可读的代码,但我有以下问题 看起来很难看: public Where<Item, Integer> getWhereSearchOnNameLight(String searchName) { try { return itemsDao.queryBuilder().selectColumns(Item.COLUMN_ID,

我正在开发一款完美的Android CRUD,有尽可能多的选项

它的目的是开源和共享

所以,我试图得到一个好的、缩进的、可读的代码,但我有以下问题

看起来很难看:

public Where<Item, Integer> getWhereSearchOnNameLight(String searchName) {
    try {
        return itemsDao.queryBuilder().selectColumns(Item.COLUMN_ID,
                                                     Item.COLUMN_NAME,
                                                     Item.COLUMN_CATEGORY_ID)
                                      .where()
                                      .like(Item.COLUMN_NAME, "%" + searchName + "%");
    } catch (SQLException e) { e.printStackTrace(); }
    return null;
}
这看起来很漂亮:

public Where<Item, Integer> getWhereSearchOnNameLight(String searchName) {
    try {
        return itemsDao.queryBuilder().selectColumns(Item.COLUMN_ID,
                                                     Item.COLUMN_NAME,
                                      .where()       Item.COLUMN_CATEGORY_ID)
                                      .like(Item.COLUMN_NAME, "%" + searchName + "%");
    } catch (SQLException e) { e.printStackTrace(); }
    return null;
}
但是编译器正在将.where与Item.COLUMN\u CATEGORY\u ID关联,因为它们在同一行上

我想让他明白这只是为了展示,但我不能


有什么想法吗?

在java中,你不能这么做。也许你可以改变他们的立场。 它看起来也很漂亮

public Where<Item, Integer> getWhereSearchOnNameLight(String searchName) {
    try {
        return itemsDao.queryBuilder().where()
                                      .like(Item.COLUMN_NAME, "%" + searchName + "%")
                                      .selectColumns(Item.COLUMN_ID,
                                                     Item.COLUMN_NAME,
                                                     Item.COLUMN_CATEGORY_ID);
    } catch (SQLException e) { e.printStackTrace(); }
    return null;
}

编译器会剥离并忽略所有空白,因此您需要尊重元素的正确顺序,即在selectColumns的后面有where。

您确实无能为力,但请尝试以一种可读性最好的方式重新组织它。许多程序员会选择他们的风格;我的建议是选择一种风格并坚持下去

例如,在IntelliJ 13中按一下返回键和几次击键就可以得到以下结果:

public Where<Item, Integer> getWhereSearchOnNameLight(String searchName) {
    try {
        return itemsDao.queryBuilder()
                .selectColumns(Item.COLUMN_ID,
                        Item.COLUMN_NAME,
                        Item.COLUMN_CATEGORY_ID)
                .where()
                .like(Item.COLUMN_NAME, "%" + searchName + "%");
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

这是我喜欢的风格,如果适用的话

编写清晰的代码。有足够的评论。遵循基本缩进。除了不合法的Java语法与Android无关之外,顺便说一句,为什么第二段代码比第一段更好?对我来说,第二个版本看起来像列\u CATEGORY\u ID应该是WHERE子句的一部分,显然它应该是返回的列之一。在我看来,它也没什么好看的。试图让编译器相信无效代码更漂亮可能不会顺利进行。PS,它是一个生成器,你可以重新排序方法调用。完美太多了!