当前位置: 首页 > 知识库问答 >
问题:

Java记录-在构造期间计算成员

陶文林
2023-03-14

我已经创建了一个Java记录,并且希望有一个构造函数,与默认构造函数相比,它可以接受更少的参数,并根据给定的参数计算和初始化所有成员。

然而,我发现这很难实现,因为自定义构造函数的第一行必须调用默认构造函数。我目前的方法是根据需要调用计算函数,但这会导致不必要的处理。

肯定有更好的方法来实现这一点吗?

public record MyRecord(double a, double b, double c){
        
     public MyRecord(double a){
          this(a,calculateB(a),calculateC(a,calculateB(a)));
     }

     private static double calculateB(double a){
          // some calculations 
          return b;

     }

     private static double calculateC(double a, double b){
          // some calculations 
          return c;
     }
}

共有1个答案

殳睿
2023-03-14

另一种解决方案是向记录中添加一个静态工厂方法,而不是一个额外的构造函数。例如:

public record MyRecord(double a, double b, double c){

    public static MyRecord newMyRecord(double a) {
        var b = calculateB(a);
        var c = calculateC(a, b);
        return new MyRecord(a, b, c);
    }


    private static double calculateB(double a){
        // some calculations 
        return b;

    }

    private static double calculateC(double a, double b){
        // some calculations 
        return c;
    }
}
 类似资料:
  • 问题内容: 我有一个类似于以下的模型: 我想查询数据库以获取按天分组的场所的评论总数。MySQL查询为: 在Django中完成此操作的最佳方法是什么?我可以用 并在视图中解析结果,但这对我来说似乎不对。 问题答案: 这应该可以工作(使用与你使用的相同的MySQL特定功能):

  • 从…起http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html,我发现JVM记录生成依赖于对象: 在下一个小GC,同样的事情发生在伊甸园空间。将删除未引用的对象,并将引用的对象移动到幸存者空间。然而,在这种情况下,它们被移动到第二个幸存者空间(S1)。此外,来自第一幸存者空间(S0)上最后一个次要G

  • 本文向大家介绍java计算两个日期中间的时间,包括了java计算两个日期中间的时间的使用技巧和注意事项,需要的朋友参考一下 java计算两个日期中间的时间 其中在数据库中有一个字段为datetime类型,想要计算两个日期之间过了多少天 多少小时 多少分钟。 思路为把时间换算为毫秒(与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。然后利用毫秒的加减计算。 计算如下:

  • 问题内容: 我想以小时/分钟/秒为单位计算两个日期之间的差异。 我的代码在这里有一个小问题: 这应该产生: 但是我得到这个结果: 有人可以在这里看到我在做什么错吗? 问题答案: 尝试 注意:这假定diff是非负数。

  • 问题内容: 您好,我试图在我创建的类的java中获取当前日期,但是一切都失败了。我已经在许多站点(例如http://www.mkyong.com/java/java- date-and-calendar-examples/)中 看到,日期构造函数没有参数,例如 现在在我的项目中,我尝试像这样使用它,但出现错误 构造函数Date()未定义 这怎么可能?到目前为止,我已经为您提供了完整的代码 我在Ec

  • 我试图从sql解决方案中调整解决方案,但我仍然受到配置单元的限制:它只接受from中的子查询,并且joins必须只包含相等项。 谢谢你。 编辑1: 我可以在使用该函数之前对表数据进行排序,但我对此不满意,因为我希望避免这是一个开销。 第二:在分布式Hadoop配置的情况下,数据在可用的作业跟踪器之间进行分割。所以我相信这个函数会有多个实例,每个映射器有一个,所以在两个映射器之间有相同的客户数据拆分