如何在java中创建一个通用的单例类? [英] how to create a generic singleton class in java?
问题描述
我想在java巫婆中创建一个通用的单例类,给出我通过方法参数传入的类的单例对象。如下面的代码:请帮助
public final class Listener< T extends Object> {
private Listener(){
}
public static< T>听者LT;?> getInstance(Class< T> clazz){
返回SingletonHolder.INSTANCE;
private static class SingletonHolder {
public static final Listener INSTANCE = new Listener();
//私有静态最终地图< Class<扩展可运行>,监听器<?扩展
// Runnable> INSTANCE = new ...;
$ / code>
Make一个枚举
只有一个值, INSTANCE
等。即时单身。
如果我理解正确,我想你希望你的单例实现一些通用接口?例如:
interface ListenerInterface< T> {
void handleEvent(T event);
$ b在这种情况下,你可以使用未经检查的转换来返回你的enum-as - 以一种通用的方式。这是安全的,只要你的单例没有实际使用实例(或者,只假设它是一个Object)。
public enum MySingleton实现了ListenerInterface< Object> {
INSTANCE;
@SuppressWarnings(unchecked)
public static< T> ListenerInterface< T> getListener(){
return(ListenerInterface< T>)INSTANCE;
}
public void handleEvent(Object event){
System.out.println(我是一个单身人士,一个事件发生了:+ event);
}
}
如果界面是生产者的消费者 - 也就是说,它返回一个 T
- 那么您只能安全地返回 null
。否则,当其他人尝试使用他们的 T
时,他们会认为是Foo,但实际上只是一个Object。
i want to create a generic singleton class in java witch gives singleton object of class which i pass in method parameter. some thing like below code : please help
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 ...;
}
}
解决方案 Make an enum
with just one value, INSTANCE
or such. Instant singleton.
If I understand you correctly, I think you want your singleton to implement some generic interface? Something like:
interface ListenerInterface<T> {
void handleEvent(T event);
}
In that case, you can use an unchecked cast to return your enum-as-singleton in a generified way. This is safe as long as your singleton doesn't actually use the instance (or else, only assume it's an Object).
public enum MySingleton implements ListenerInterface<Object> {
INSTANCE;
@SuppressWarnings("unchecked")
public static <T> ListenerInterface<T> getListener() {
return (ListenerInterface<T>) INSTANCE;
}
public void handleEvent(Object event) {
System.out.println("I am a singleton. An event happened: " + event);
}
}
If the interface is a producer instead of consumer -- that is, it returns a T
-- then you can only return null
safely. Otherwise, someone else will get a ClassCastException when they try to use their T
, which they think is a Foo but is actually just an Object.
这篇关于如何在java中创建一个通用的单例类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!