java - 有没有办法有效地审计 Java 中对象的统计属性?
问题描述
假设我有一个 Person 类,我创建了 10 个 Person 实例,每个人都有几个不同的属性,例如enum Gender{MALE, FEMALE}
,enum Profession{CEO, POLICE, TEACHER}
等。
而且我必须以某种方式随机创建许多具有随机属性的人,并使用专门的类来审核创建人属性的统计信息。
因此,最终,我需要生成一个属性列表,其中包含一些相应的统计信息,例如“ FEMALE: [number]
, POLICE: [number]
,...”。
目前,我正计划将各种人员的属性计数添加为审计类中的一堆新属性,例如“ femaleCount int
, policeCount int
, ...”然后根据生成的人员操作计数。
但是,我为每个人获得了 10 种属性,所以我想知道是否有更好的方法来做到这一点。
感谢您的阅读。
解决方案
下面是一种可能的方法,但不要说它是唯一的,也不是最好的。
这仅取决于目的和您的设计。
其他选项可能是将所有内容存储Persons
在数据结构中List
,并仅根据特定时间的数据计算统计信息(此处也有更新/删除)
仅添加的版本正在计数...
public class Statistic
{
private static Statistic s=null;
public int countPerson;
public int countMale;
public int countFemale;
public static Statistic getInstance()
{
if(s==null)
s = new Statistic(0, 0, 0);
return s;
}
public static Statistic getInstace(int cP,int cM, int cF)
{
if(s==null)
s = new Statistic(cP, cM, cF);
return s;
}
//do whatever init wanted
private Statistic(int cP,int cM, int cF)
{
countPerson = cP;
countMale = cM;
countFemale = cF;
}
public String toString()
{
return "Total="+countPerson+", Male="+countMale+", Female=" + countFemale;
}
}
...
public class Person
{
public int id;
public String name;
public Gender g;
public Profession p;
public enum Gender{MALE, FEMALE};
public enum Profession{CEO, POLICE, TEACHER}
Person(int id,String name, Gender g, Profession p)
{
this.id = id;
this.name = name;
this.g = g;
this.p = p;
Statistic.getInstance().countPerson++;
if(g.equals(Gender.MALE))
{
Statistic.getInstance().countMale++;
}
else
{
Statistic.getInstance().countFemale++;
}
}
}
...
public class TestStat {
public static void main(String[] args)
{
//cPersons,cMale,cFemale - init
Statistic.getInstace(10, 5, 5);
System.out.println(Statistic.getInstance());
new Person(1,"Male",Person.Gender.MALE, Person.Profession.TEACHER);
System.out.println(Statistic.getInstance());
new Person(2,"Female",Person.Gender.FEMALE, Person.Profession.CEO);
System.out.println(Statistic.getInstance());
}
}
输出
//custom start from (10,5,5) based on Singleton Custom Constructor
Total=10, Male=5, Female=5
//start update counters
Total=11, Male=6, Female=5
Total=12, Male=6, Female=6
三思而后行,也许最好保持 a List
with Persons
onSingleton
并且每次都使用 a new Computation
- fromSingleton
而不是 on Person
。关于Delete
一个人,可以翻译为“从一家公司搬到另一家”,然后它不会反映在统计上。
即便如此,在当前您可以添加一个delete method
on person ,这可以通过 adjust Statistic
withminus
和Person-Instance
with反映出来null
。
此外,您可以根据需要更新设计。
推荐阅读
- sql - 将字符串转换为整数,然后再转换回字符串
- html - 如何在 SVG 响应式上放置文本?
- python - 具有长时间运行进程的 wxPython 冻结动画 gif
- reporting-services - 确定 SSRS 报告计数并在运行前让用户验证
- ios - 使用 UIInputViewController 检测硬件键盘事件
- java - 从 https rest api 调用 http rest api 错误 502
- r - 删除相差小于 2 度的数据点
- google-apps-marketplace - 无法从 Google 表格中删除插件
- r - 当 Shiny 不读取我的文件时,我该怎么办?
- typescript - 如何优雅地退出 tsc“watch”模式?