gpt4 book ai didi

java - 当我声明并初始化类的对象时,如何自动递增类中的字段?

转载 作者:行者123 更新时间:2023-12-02 01:08:36 25 4
gpt4 key购买 nike

我的 Java 应用程序中有 3 个类,其中一个代表医疗政策:

public class MedicalPolicy implements PolicyType {
private int id;
// and some other fields

public MedicalPolicy(final LocalDate effective,final LocalDate expiry,final ArrayList<Beneficiary> beneficiaries){
//Constructor that does NOT set/initialize the id field
}
}

代表汽车政策的另一个类:

public class MotorPolicy implements  PolicyType{

private int id;
// and some other fields

public MotorPolicy(final LocalDate effective,final LocalDate expiry,final double vehiclePrice){
//Constructor that does NOT set/initialize the id field
}
}

第三个类包含 main() 方法。

每次我在 main() 中声明并初始化医疗保单对象时,我希望医疗保单的 id 增加 1,对于 Motor 来说也是如此策略,即如果我在 main() 中声明 2 个医疗策略对象,我希望第一个医疗策略的值的 id 等于 1,而第二个医疗策略的值等于 1。将 id 的值设置为 2,如果我声明 3 个汽车政策,我希望第一个的 id 等于 1,第二个的 id 等于 2,第三个的 id 等于 3。

我怎样才能做到这一点?

P.S:如果我必须从构造函数中设置/初始化它,则没有问题,重要的是我不应该将它的值作为构造函数参数传递。

最佳答案

正如我在评论中所建议的,我会添加 AtomicInteger计算构造函数调用的次数:

public class MedicalPolicy implements PolicyType {
private static final AtomicInteger counter = new AtomicInteger();

private final int id;

public MedicalPolicy(
final LocalDate effective,
final LocalDate expiry,
final ArrayList<Beneficiary> beneficiaries){
id = counter.incrementAndGet();
}
}

使用AtomicInteger的原因是线程安全。

但是请注意,此实现仅计算调用构造函数的频率。为了获取给定类的可到达实例的计数,我想到了两种解决方案。其中之一涉及覆盖 finalize() (在 Java 13 中已弃用)。另一个使用 PhantomReferencesList跟踪可到达的实例。

关于java - 当我声明并初始化类的对象时,如何自动递增类中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59699801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com