是否存在一些 Java8 方便的方式来增加对象的 属性?

Does exist some Java8 convenient manner to incr a property of an object?

最近用的项目java8,发现处理Collection类型很方便,给了我很大的惊喜。但是突然觉得一些常规的语法好繁琐,比如我有一个Object叫BuyerOrderCountStats,买家每次提交订单,都会增加他的订单数,

BuyerOrderCountStats bocs = ...;
bocs.setOrderCount(bocs.getOrderCount()+1);

不知道java8这种情况有什么方便的方法吗?

java-8 中没有什么特别之处可以帮助解决您的问题。但是,您可以设计 class(即使在 Java 1.0 中)以更好地适应业务逻辑。删除 setOrderCount 方法并将其替换为 addOrder():

class BuyerOrderCountStats {
    private int orderCount;

    public void addOrder() {
        orderCount++;
    }
}

在许多情况下,您可以创建更好的业务逻辑特定方法来修改对象状态,而不是普通的 setter。

为您指明正确的方向。每当有业务逻辑要建模时,您应该避免 public getter 和 setter(尤其是 setter)并尝试提供适当的业务逻辑特定更新操作。

但是由于您一般询问了属性和 Java 8 个功能,因此值得注意的是,如果您仍然希望(或需要)允许 [=35= 的外部更新操作,则还有一个替代方案]:

class BuyerOrderCountStats {
    private int orderCount;

    // may still have getters and setters

    public void updateOrderCount(IntUnaryOperator op) {
        orderCount=op.applyAsInt(orderCount);
    }
}

然后您可以将 属性 更改为:

BuyerOrderCountStats stats= …
stats.updateOrderCount(count -> count+1 );

你只需要记住,你不能在这里使用后缀 ++ 因为 count++ 只修改 lambda 表达式的参数,但 returns 旧值。前缀增量,即 ++count,在计算结果时会在这里起作用,但参数的修改将毫无意义且具有误导性。因此,这里既不要使用 ++ 也不要使用 +=,像上面的例子一样总是使用 +。其他运营商也是如此。

updateProperty方法可以像setProperty一样在进行更改之前验证结果是否在属性的合法范围内。 updateProperty 方法的优点之一是,它可以在需要时提供锁定以避免并发更新。这是 get-modify-set 往返无法提供的东西。