gpt4 book ai didi

参数化类的java单例

转载 作者:行者123 更新时间:2023-11-30 07:34:36 26 4
gpt4 key购买 nike

我无法理清这一点。

public class MySingleton<T extends AUsefulClass>{
Map<String, T> myUsefulRegistry;
private static MySingleton<T> _instance = null;

public static instance(){
if(instance == null)
_instance = new MySingleton<T>();

return _instance;
}
}

public class Test{
@Test
public void testThis(){
MySingleton<SomeClass> mySingleton = MySingleton<SomeClass>().instance();
}
}

这种参数化是错误的,因为你不能对非静态 T 进行静态引用。不过,我还是想构建一个可参数化的单例类。

最佳答案

问题在于,在 Java 中(与 .NET 不同)无论您提供多少种不同的类型参数,您都只有一个静态变量 - 所以 MySingleton<Foo>._instance等于MySingleton<Bar>._instance .

我怀疑你想要一个 Map<Class<? extends AUsefulClass>, MySingleton> ,抑制有关原始类型的警告。然后你会做你的instance方法采取 Class<T>参数,所以它知道要查找什么。

当然,这是假设您希望不同类型的参数具有单独的状态。如果您不需要 MySingleton<Foo> 需要不同的状态和 MySingleton<Bar>您可以真正拥有一个实例,并在抑制未经检查的转换警告的同时转换它。

关于参数化类的java单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5081829/

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