参数化类的java单例

标签 java singleton design-patterns parameterized

我无法理清这一点。

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/

相关文章:

java - 查找有关 Java 类、软件设计的信息?

Java:我们可以将 DAO 用作 Singleton 实例吗

java - 扩展 Button 类以创建单例

java - JNDI 是否使用 DNS 搜索列表?

java - 对象到字符串总是给我 null

java - DI 框架可以在 EJB 应用程序中提供单例范围吗? (不同的类加载器用法)?

java - 如何在 Java 中将对象从一种类型复制到另一种类型?

postgresql - 我是否需要计算字段或更新每笔交易?

java - Java Swing 是否限制它绘制的项目数量?

java - 是什么破坏了我的 getResourceAsStream?