我有以下代码:
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()和私有静态Stack池外部化为抽象类?
答案 0 :(得分:1)
正如评论中所说,你不能。但是你可以创建一个随后委派的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
现在可以在任何想要拥有相同机制的地方使用。