2013-09-26 3 views
0

Как я могу создать свой экземпляр?Singleton with Generics Аргумент

У меня всегда возникают ошибки компиляции.

Описания Пути к ресурсу Расположение Тип Не может сделать статическую ссылку на нестатический тип КОМПОНЕНТ ComponentManager.java

package component; 

public class ComponentManager<COMPONENT extends Component> { 

private static ComponentManager<COMPONENT> instance = new ComponentManager<COMPONENT >(); 

private ComponentManager() { 

} 

public static ComponentManager<?> getInstance() { 
    return instance; 
} 

} 
+0

Если у вас возникли ошибки в компиляции и вы хотите получить нашу помощь, пожалуйста, рассмотрите размещение сообщений об ошибках целиком. –

+0

Возможно, вам не хватает инструкций импорта для одного, если только у вас нет собственного класса Component. –

+1

Я беру из вашего кода, что вы хотите N одиночек, каждый для подкласса «Компонент»? Если это так, это не будет работать из-за ** стирания типа **. – SJuan76

ответ

0

Положите new ComponentManager() линию внутри метода getInstance() вызвать конструктор, если instance имеет нулевое значение, в противном случае возврат instance.

public class ComponentManager { 

    private static ComponentManager instance; 

    private ComponentManager() { 

    } 

    public static ComponentManager getInstance() { 
     if (instance != null) { 

     } else { 
      instance = new ComponentManager(); 
     } 
     return instance; 
    } 

} 
+0

Я хочу сделать мой getInstance() без условного. – user1902062

1

Ваш синтаксис неверен в декларации и создании экземпляра. Создайте 'instance' следующим образом:

private static ComponentManager<? extends Component> instance = new ComponentManager< >(); 
+0

Это работает. Спасибо! – user1902062

+0

Он должен и должен работать для меня, по крайней мере, для компиляции. Java 7 добавила возможности вывода с ограниченным типом. http://docs.oracle.com/javase/7/docs/technotes/guides/language/type-inference-generic-instance-creation.html – daveed007

+0

@ daveed007. Ах! Прости. Это была вина на моей стороне. Он прекрасно компилируется. –