Я пытаюсь понять дженерики должным образом, и я написал очень простую фабрику, но я не могу понять, как обойти эти два предупреждения (у меня были хорошие ошибки, но, вероятно, я не поиск с правильными терминами). Ой! и я не хочу просто подавлять предупреждения - я почти уверен, что можно сделать это правильно .
- Тип безопасности: конструктор simpleFactory (Class) относится к необработанному типу simpleFactory. Ссылки на универсальный тип simpleFactory должны быть параметризованы
- simpleFactory является необработанным типом. Ссылки на универсальный тип simpleFactory должны быть параметризованы
Все конструкции, которые я пытался разрешить, на самом деле не компилируются - это, кажется, самое близкое, что я могу получить. Это строка, помеченная ++++, которая генерирует предупреждения (в Eclipse Indigo для проекта Android)
Я понимаю, что вокруг есть несколько отличных объектных фабрик, но речь идет о понимании языка, а не о создании фабрики;)
Вот источник:
import java.util.Stack;
public class simpleFactory<T> {
private Stack<T> cupboard;
private int allocCount;
private Class<T> thisclass;
public static simpleFactory<?> makeFactory(Class<?> facType) {
try {
facType.getConstructor();
} catch (NoSuchMethodException e) {
return null;
}
+++++ return new simpleFactory(facType);
}
private simpleFactory(Class<T> facType) {
thisclass = facType;
cupboard = new Stack<T>();
}
public T obtain() {
if (cupboard.isEmpty()) {
allocCount++;
try {
return thisclass.newInstance();
} catch (IllegalAccessException a) {
return null;
} catch (InstantiationException b) {
return null;
}
} else {
return cupboard.pop();
}
}
public void recycle(T wornout) {
cupboard.push(wornout);
}
}