作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在 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 ...;
}
}
最佳答案
制作一个只有一个值的 enum
,INSTANCE
或类似的值。即时单例。
如果我没理解错的话,我想你希望你的单例实现一些通用接口(interface)?像这样的东西:
interface ListenerInterface<T> {
void handleEvent(T event);
}
在这种情况下,您可以使用未经检查的转换以通用方式返回您的枚举作为单例。只要您的单例实际上不使用该实例(或者,仅假设它是一个对象),这是安全的。
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);
}
}
如果接口(interface)是生产者而不是消费者——也就是说,它返回一个T
——那么你只能安全地返回null
。否则,其他人在尝试使用他们认为是 Foo 但实际上只是一个对象的 T
时会得到 ClassCastException。
关于java - 如何在 java 中创建一个通用的单例类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11772362/
我是一名优秀的程序员,十分优秀!