java - Getter方法使用

标签 java grails groovy

我有一个场景,卖家配置了以下费用:

BigDecimal paidPlanFixedFee
BigDecimal fixedFee
Boolean isPaidPlan

现在,如果卖方有付费计划,则应使用paidPlanFixedFee,同时触发付款;如果卖方采用免费计划,则应使用fixedFee。

一种方法是在引用fixedFee的所有地方更改代码,例如:

if(paidPlan){
// Use paidPlanFixedFee
}else{
// Use fixedFee
}

另一种方法是仅在fixedFee的getter方法中进行更改:

BigDecimal getFixedFee(){
  if(paidPlan){
    // return paidPlanFixedFee
  } else{
   // return fixedFee
  }
}

在这种情况下使用 getter 方法是一个好的做法还是应该避免?

最佳答案

看起来用这个逻辑重写 getter 并不是一个好主意。在这种情况下,您应该控制每个 getter 的使用(例如 json 序列化或数据库模型映射等),因为如果您需要在某个地方获取原始值,它可能会导致麻烦。

最好有单独的calculateFee()方法

transient 场怎么样?

如果您要在 groovy 中创建没有实际字段的 getter:

BigDecimal getFee(){
  paidPlan ? paidPlanFixedFee : fixedFee
}

然后你就可以像访问常规字段一样访问它:

println instance.fee

在这种情况下,您需要将固定费用更改为提及固定费用的费用。但在此更改之后,所有 future 的修改都会变得更加容易。

关于java - Getter方法使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53114466/

相关文章:

grails - Grails 中的 Seam 对话模拟

jquery - 在 Grails 中通过 AJAX 渲染模板

grails - 如何在 url mapping.groovy 中映射具有查询字符串参数的 URL?

java - swing 组件的命名策略

java - 为什么我的maven项目无法解决

java - 如何将数组和当前索引传递给 Java 中的方法

java - Spring 数据 jpa,jparepository 返回字符串列表代替 DTO 对象

grails - 已经为此响应调用了Grails getWriter()

grails - 无法在 Grails 3 中填充 java.util.getTimeZone 以进行 Taglib 中的 spock 测试

java - 终止实例永远不会返回终止状态 aws sdk