Проблема в том, что в Java (в отличие от .NET) у вас есть только одна статическая переменная, независимо от того, сколько аргументов различных типов вы предоставляете - так что MySingleton<Foo>._instance
равно MySingleton<Bar>._instance
.
Я подозреваю, что вы хотите Map<Class<? extends AUsefulClass>, MySingleton>
, подавляя предупреждения о необработанных типах. Тогда вы бы заставили свой метод instance
принять параметр Class<T>
, чтобы он знал, что искать.
Конечно, это предполагает, что вы хотите отдельное состояние для аргументов другого типа. Если вы не нуждаетесь в другом состоянии для MySingleton<Foo>
и MySingleton<Bar>
, вы действительно можете иметь один экземпляр и просто разыграть его, подавляя предупреждение о непроверенном преобразовании.