Некоторое время назад писал на юнити. Использовал на шарпе такой класс:
public abstract class MySingleton
public static T Instance
{
get
{
if (_instance == null)
_instance = (T)Activator.CreateInstance(typeof(T));
return _instance;
}
}
public static void ForgetInstance()
{
_instance = default(T);
}
protected MySingleton()
{
}
Можно ли как-то извернуться, чтобы написать похоже на java?
В лоб то, говорит: "Cannot make a static reference to the non-static type T"
Ответ
Как я понимаю, хочется хранить по одному объекту для каждого запрошенного класса, созданному с помощью конструктора по умолчанию. Для этой цели можно завести ConcurrentHashMap
import java.util.concurrent.ConcurrentHashMap;
public class MySingleton {
private static ConcurrentHashMap
@SuppressWarnings("unchecked")
public static
public static void forgetInstance(Class clazz) {
map.remove(clazz);
}
}
Соответственно использовать как-то так:
public static void main(String[] args) {
String str = MySingleton.getInstance(String.class);
String str2 = MySingleton.getInstance(String.class);
System.out.println(str == str2); // true
MySingleton.forgetInstance(String.class);
}
Комментариев нет:
Отправить комментарий