【发布时间】:2021-02-16 16:32:49
【问题描述】:
我想在 java 中创建一个通用的单例类,女巫给出了我传入方法参数的类的单例对象。类似下面的代码:请帮助
public final class Listener<T extends Object> {
private Listener() {
}
public static <T> Listener<?> getInstance(Class<T> clazz) {
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder {
public static final Listener INSTANCE = new Listener();
// private static final Map<Class<? extends Runnable>,Listener<? extends
// Runnable> INSTANCE = new ...;
}
}
【问题讨论】:
-
为什么需要它是通用的?在您的示例中,您没有以任何方式使用 T。
-
这个结果会不会违背单例所基于的整个想法(只有该类的一个实例)?
-
您到底想达到什么目标?如果它是一个真正的单例,它就不可能是真正的泛型,因为你必须在创建时选择类型参数。还是您想要每个 T 类型一个实例?
-
顺便说一句,一个泛型的单例绝对是有意义的——只要它不获取或给出其泛型参数的实例。
Collections.empty[List|Map|Set]()如果您尝试添加或获取任何元素,则返回失败的单例实例。emptyList(etc) 方法具有未经检查的强制转换,可将单例转换为List<T>(其他集合接口相同)。