У вас есть 2 небольшие ошибки, которые приводят к тому, что ваш синглтон-класс не работает. Во-первых, ваш mInstance
не является статическим полем класса, а это означает, что каждый экземпляр класса Instance
(неправильно выбранное имя TBH, используйте что-то более конкретное) будет иметь свой собственный mInstance
, что наносит ущерб цели целого, один единственный экземпляр.
Во-вторых, у вас есть универсальный класс, который, к сожалению, не очень хорошо работает в одноэлементном контексте. Потому что, когда у вас всегда есть только один экземпляр, вводить дженерики не имеет смысла. потому что тогда вы просто можете жестко закодировать обобщенную переменную T
с помощью String
или тип, который вы используете.
Чтобы преодолеть эти проблемы, вам нужно изменить свой класс следующим образом:
public final class Instance {
private static Instance mInstance;
public static Instance getInstance(){
if(mInstance == null){
mInstance = new Instance();
}
return mInstance;
}
private Instance(){
// your initialization logic
}
}
Я также принял некоторые нормальные решения, например, создание класса final
, чтобы второй экземпляр не всплывал , например, путем создания подклассов. Затем я также создал конструктор и поле mInstnace
private
. Чтобы не допустить повторения нежелательных изменений в самом классе, и не позволяя пользователю разрешить создавать более одного экземпляра.