java - 每个扩展类的静态变量
问题描述
假设我有一个基类/主abstract
类:AbstractObject
. AbstractObject
由两个类扩展:Object1
和Object2
.
这两个模板也有许多不同的类从它们扩展而来,例如,Object3
,Object4
, 和Object5
继承自Object1
, ,Object6
,Object7
继承自Object2
。
我希望每个单独的类(Object1
, Object2
, ..., Object7
)都有一个计数器来计算由它组成的实例的数量。
我以为我可以使用一些public static
变量counter
,但我不确定如何在其中声明它AbstractObject
,所以我的任何对象都不会复制代码。有什么想法吗?
abstract class AbstractObject {
...
public static counter = ?
}
class Object1 extends AbstractObject {
...
}
class Object2 extends AbstractObject {
...
}
class Object3 extends Object1 {
...
}
class Object4 extends Object1 {
...
}
class Object7 extends Object2 {
...
}
解决方案
我想要......有一个计数器来计算由它组成的实例数 。
实例 - 这意味着“为每个类实例化的对象”?
如果是,则使用静态地图。例如:
public class AbstractObject {
private static Map<Class, Integer> map = Collections.synchronizedMap(new HashMap<>());
public AbstractObject() {
Class clazz = this.getClass();
map.merge(clazz, 1, (x, y) -> x + y);
}
public static Map<Class, Integer> getCounters() {
return Collections.unmodifiableMap(map);
}
}
public class Object1 extends AbstractObject {
}
public class Object11 extends Object1 {
}
public class Object2 extends AbstractObject {
}
public class Object12 extends Object11{
}
现在:
public static void main(String[] args) {
AbstractObject o1 = new Object1();
o1 = new Object1();
o1 = new Object2();
o1 = new Object11();
o1 = new Object11();
o1 = new Object12();
AbstractObject.getCounters().forEach((k, v) -> System.out.println(k + " ==> " + v));
}
给出这个结果:
class somepackage.Object11 ==> 2
class somepackage.Object12 ==> 1
class somepackage.Object1 ==> 2
class somepackage.Object2 ==> 1
推荐阅读
- javascript - Javascript 对象是否总是唯一的
- python - 如果有办法检查作者是否有权限,但如果我是(机器人所有者)是作者,它无论如何都可以工作
- protocol-buffers - gRPC 在定义 rpc protobuf 时如何支持关键字流?
- react-native - 我可以在单击选项卡屏幕时禁用 tabBarBadge 吗?
- statistics - 如何解释贝叶斯中的平滑
- python - 如何在 Django 的视图中运行 url?
- php - 浏览器不渲染 css 和 JS 和图像
- javascript - 仅在 html 顶层处理 keydown 事件
- android - 如何以编程方式修改特定视图角的半径?
- android - 如果编辑文本触及屏幕的另一个组件,如何限制其行数?