gpt4 book ai didi

java - 如何在 java 中创建一个通用的单例类?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:53:31 25 4
gpt4 key购买 nike

我想在 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 ...;
}
}

最佳答案

制作一个只有一个值的 enumINSTANCE 或类似的值。即时单例。

如果我没理解错的话,我想你希望你的单例实现一些通用接口(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com