小编eja*_*env的帖子

Eclipse的参数名称提示

Intellij包含一个很好的参数名称提示功能(Intellij idea - 如何始终显示方法参数名称)

它是否计划将Eclipse合并?

eclipse intellij-idea

22
推荐指数
2
解决办法
1841
查看次数

使用流畅的接口重构长方法

我想知道您对使用流畅的界面模式重构一个长方法的看法.

http://en.wikipedia.org/wiki/Fluent_interface

流畅的模式不包括在重构书中.

例如,假设您有这么长的方法(因为它有很多东西,所以有很长的名字)

class TravelClub {

   Receipt buyAndAddPointsAndGetReceipt(long amount, long cardNumber) {
    buy(amount);
    accumulatePoints(cardNumber);
    return generateReceipt();

   }

   void buy(int amount) {...}

   void accumlatePoints(int cardNumber) {...}

   void generateRecepit() {...}

}
Run Code Online (Sandbox Code Playgroud)

称为:

Receipt myReceipt = myTravelClub.buyAndAddPointsAndGetReceipt(543L,12345678L);
Run Code Online (Sandbox Code Playgroud)

这可以重构为:

class TravelClub {

   TravelClub buy(long amount) {
    //buy stuff
    return this;
   }

   TravelClub accumulatePoints(long cardNumber) {
    //accumulate stuff
    return this;
   }

   Receipt generateReceipt() {
    return new Receipt(...);
   }


}
Run Code Online (Sandbox Code Playgroud)

并称为:

Receipt myReceipt = myTravelClub.buy(543L).accumulatePoints(12345678L).generateReceipt();
Run Code Online (Sandbox Code Playgroud)

从我的观点来看,分解long方法并分解其名称是一种非常好的方式.

你怎么看?

java refactoring fluent-interface fluent

4
推荐指数
1
解决办法
645
查看次数

long方法的方法名称

好的风格(清洁代码书)说方法的名称应该描述方法的作用.因此,例如,如果我有一个验证地址的方法,将其存储在数据库中,并发送电子邮件,如果名称是如此 verifyAddressAndStoreToDatabaseAndSendEmail(address);

要么

verifyAddress_StoreToDatabase_SendEmail(address);

虽然我可以在3种方法中划分该功能,但我仍然需要一种方法来调用这3种方法.所以一个大的方法名称是不可避免的.

拥有和命名的方法肯定描述了该方法的作用,但IMO它的可读性并不高,因为名称可能非常大.你会如何解决它?

编辑:也许我可以使用流畅的风格来分解方法名称,如:

verifyAddress(address).storeToDatabase().sendEmail();

但我需要一种方法来确保调用的顺序.也许通过使用状态模式,但这会导致代码增长.

methods refactoring fluent-interface

4
推荐指数
1
解决办法
113
查看次数

如何在assertj中验证元素是其中之一

我找不到如何使用 assertj 检查以下内容(这很常见):

假设我有:

 result1 = {"AAA", "BBB"}
 result2 = {"DDD"}
Run Code Online (Sandbox Code Playgroud)

我想检查结果中的值是以下之一:

String[] valid = String[]{"AAA", "BBB", "CCC"};
Run Code Online (Sandbox Code Playgroud)

使用assertj,应该是这样的:

assertThat(result1).xxxx(valid);
assertThat(result2).xxxx(valid);
Run Code Online (Sandbox Code Playgroud)

这样 result1 会通过检查,但 result2 不会。

contains() 不起作用(它检查结果是否包含所有有效元素)

我不想为这种检查创建自定义条件

任何想法?

assertj

3
推荐指数
1
解决办法
1527
查看次数