java - 如何将代码外部化为抽象类
问题描述
我有以下代码:
public class A {
private int id;
private String name = null;
private static int counter = 0;
private static Stack<A> pool = new Stack<>();
private A (){
A.counter += 1;
setId();
}
private void setId(){
id = A.counter;
}
public void setName(String name) {
this.name = name;
}
public static A getInstance() {
A element;
try {
element = pool.pop();
} catch (EmptyStackException e) {
element = new A();
}
return element;
}
public static void returnInstance(A element) {
pool.push(element);
}
}
如何将 getInstance()、returnInstance() 和私有静态堆栈池外部化为抽象类?
解决方案
正如评论中所说,你不能。但是您可以创建一个 Helper 类,然后委托给它:
public final class Pool<T> {
private final Stack<T> pool = new Stack<>();
private final Supplier<? extends T> provider;
public Pool(Supplier<? extends T> provider){
this.provider = provider;
}
public T getInstance() {
T element;
try {
element = pool.pop();
} catch (EmptyStackException e) {
element = provider.get();
}
return element;
}
public void returnInstance(T element) {
pool.push(element);
}
}
在课堂上A
:
public class A{
private int id;
private String name = null;
private static int counter = 0;
public static final Pool<A> pool = new Pool<>(A::new);
private A (){
A.counter += 1;
setId();
}
private void setId(){
id = A.counter;
}
public void setName(String name) {
this.name = name;
}
}
然后可以按如下方式使用:
A a = A.pool.getInstance();
// do some stuff with a
A.pool.returnInstance(a);
这个类Pool
现在可以在任何你想拥有相同机制的地方使用。
推荐阅读
- python - 使用 asyncio 的简单 Python TCP 分叉服务器
- jquery - 滚动到顶部按钮未显示
- matlab - 从 3d 网格创建矩阵
- google-apps-script - 移动带有取消选中复选框的行需要从特定行开始
- tensorflow - 如何使用 model-main.py 训练 tensorflow 对象检测?
- c# - 是否可以在此 Switch 语句中使用 Goto 语句?
- css - 悬停时的边框效果会导致复选框出现问题
- python - 为什么 Python Fabric 用连字符代替下划线?
- java - 如何从 OpenAPI 3.0 yaml 文件生成 JSON 示例?
- python - 条件语句 Python3