Java 当我声明并初始化类的对象时,如何自动递增类中的字段?
我的Java应用程序中有3个类,其中一个代表医疗政策:Java 当我声明并初始化类的对象时,如何自动递增类中的字段?,java,class,Java,Class,我的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> beneficiarie
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
}
}
第三个类包含main()
方法
每次我在我的main()
中声明并初始化一个医疗保险单对象时,我希望医疗保险单的id
增加1,这与汽车保险单相同,即如果我在main()中声明两个医疗保险单对象
我希望第一份医疗保险的id
值等于1,第二份医疗保险的id
值设置为2,如果我申报3份机动车保险,我希望第一份医疗保险的id
值等于1,第二份医疗保险的id
值等于2,第三份医疗保险的id
值等于3
我怎样才能做到这一点
附言:如果我必须从构造函数中设置/初始化它,没有问题,重要的是我不应该将它的值作为构造函数参数传递。如果你不能创建一个列表,那么该类的每个对象都将与其在索引中的递增位置相关联。例如,listName.get(obj num-1),因为第一个对象将存储在索引0处。此外,listName.size()将返回一个值,以便您可以跟踪您拥有的数量 如果不能创建列表,则该类的每个对象都将与其在索引中的递增位置相关联。例如,listName.get(obj num-1),因为第一个对象将存储在索引0处。此外,listName.size()将返回一个值,以便您可以跟踪您拥有的数量 使用
私有静态int
作为实例变量
在构造函数中,您将id设置为序列号,并向序列号添加一个id
public class MedicalPolicy implements PolicyType {
private static int serial = 1;
private int id;
// and some other fields
public MedicalPolicy(final LocalDate effective,
final LocalDate expiry,
final ArrayList<Beneficiary> beneficiaries){
this.id = serial++;
// Other constructor stuff
}
}
公共类医疗政策实现PolicyType{
专用静态int串行=1;
私有int-id;
//以及其他一些领域
公共医疗政策(最终本地生效日期,
最终本地日期到期,
最终ArrayList受益人){
this.id=串行++;
//其他构造函数的东西
}
}
如果类需要线程安全,请使用图灵85中提到的
AtomicInteger
。使用私有静态int
作为实例变量
在构造函数中,您将id设置为序列号,并向序列号添加一个id
public class MedicalPolicy implements PolicyType {
private static int serial = 1;
private int id;
// and some other fields
public MedicalPolicy(final LocalDate effective,
final LocalDate expiry,
final ArrayList<Beneficiary> beneficiaries){
this.id = serial++;
// Other constructor stuff
}
}
公共类医疗政策实现PolicyType{
专用静态int串行=1;
私有int-id;
//以及其他一些领域
公共医疗政策(最终本地生效日期,
最终本地日期到期,
最终ArrayList受益人){
this.id=串行++;
//其他构造函数的东西
}
}
如果您的类需要线程安全,请使用图灵85中提到的
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();
}
}
公共类医疗政策实现PolicyType{
私有静态最终AtomicInteger计数器=新的AtomicInteger();
私有最终int id;
公共医疗政策(
最终本地日期生效,
最终本地日期到期,
最终ArrayList受益人){
id=计数器。递增和获取();
}
}
使用原子整数的原因是线程安全
但是,请注意,此实现只计算调用构造函数的频率。要获得给定类的可访问实例数,我想到了两种解决方案。一个涉及重写(Java13中不推荐使用)。另一个使用的
列表
跟踪可访问的实例。正如我在评论中所建议的,我将添加一个来计算构造函数调用的数量:
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();
}
}
公共类医疗政策实现PolicyType{
私有静态最终AtomicInteger计数器=新的AtomicInteger();
私有最终int id;
公共医疗政策(
最终本地日期生效,
最终本地日期到期,
最终ArrayList受益人){
id=计数器。递增和获取();
}
}
使用原子整数的原因是线程安全
但是,请注意,此实现只计算调用构造函数的频率。要获得给定类的可访问实例数,我想到了两种解决方案。一个涉及重写(Java13中不推荐使用)。另一个使用的列表
来跟踪可访问的实例。您可以使用,它在应用程序中使用,例如原子递增计数器
public class MedicalPolicy implements PolicyType {
private static final AtomicInteger count = new AtomicInteger();
// 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
count.incrementAndGet();
}
}
公共类医疗政策实现PolicyType{
私有静态最终AtomicInteger计数=新的AtomicInteger();
//以及其他一些领域
公共医疗政策(最终本地日期生效、最终本地日期到期、最终ArrayList受益人){
//未设置/初始化id字段的构造函数
count.incrementAndGet();
}
}
您可以使用,它用于诸如原子递增计数器之类的应用程序中
public class MedicalPolicy implements PolicyType {
private static final AtomicInteger count = new AtomicInteger();
// 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
count.incrementAndGet();
}
}
公共类医疗政策实现PolicyType{
私有静态最终AtomicInteger计数=新的AtomicInteger();
//以及其他一些领域
公共医疗政策(最终本地日期生效、最终本地日期到期、最终ArrayList受益人){
//未设置/初始化id字段的构造函数
count.incrementAndGet();
}
}
在两个类中:声明一个私有静态最终AtomicInteger计数器=新的AtomicInteger()
,调用counter.getAndIncrement()构造函数中的代码>为什么它是最终的?final不表示不能更改吗?不,final
表示不能重新分配引用。它的语义在两个类中都不同于C/C++中的const
:声明一个私有静态final-AtomicInteger计数器=new-AtomicInteger()代码>,,