我想在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 ...;
}
}
Run Code Online (Sandbox Code Playgroud)
做一个enum只有一个值,INSTANCE或者这样的.即时单身人士.
如果我理解正确,我想你希望你的单例实现一些通用接口?就像是:
interface ListenerInterface<T> {
void handleEvent(T event);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以使用未经检查的强制转换以常规方式返回您的枚举单例.只要你的单例实际上没有使用实例(或者只假设它是一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果接口是生产者而不是消费者 - 也就是说,它返回一个T- 那么你只能null安全地返回.否则,其他人在尝试使用他们时会得到ClassCastException T,他们认为这是一个Foo但实际上只是一个Object.
| 归档时间: |
|
| 查看次数: |
13710 次 |
| 最近记录: |