Задатак — Паметни ормарић
Потребно је направити генеричку класу:
public class Ormaric<T>
Ормарић има:
- број ормарића;
- садржај типа
T.
Треба да омогући:
smesti(T predmet)
T preuzmi()
boolean jePrazan()
У један ормарић може да се смести само један предмет.
Демонстрација
Направити класе:
Ranac
Laptop
и затим:
Ormaric<Ranac>
Ormaric<Laptop>
Показати да:
Ormaric<Laptop>
не дозвољава да се у њега смести Ranac.
Додатак — ограничење типа
Дефинисати интерфејс:
public interface ImaMasu {
double masa();
}
Нека га имплементирају:
Ranac
Laptop
Затим направити:
public class OrmaricSaVagom<T extends ImaMasu>
који поред стандардних операција може да врати:
double trenutnaMasa()
Размислити:
- Зашто обичан
Ormaric<T>не може да позовеmasa()? - Шта компајлер зна када напишемо
<T extends ImaMasu>? - Зашто је ово боље од кастовања на
ImaMasuунутар класе?
Прецизан уговор
null није дозвољен предмет. Смештање у заузет ормарић баца IllegalStateException и не мења садржај. Смештање null баца IllegalArgumentException. Преузимање из празног ормарића враћа null. Маса празног ормарића је 0; маса предмета мора бити ненегативна. Кратку синтаксу бацања изузетка користимо као уговор, а обраду детаљно радимо у недељи 11.
Самостални део — Две вредности
Потребно је чувати пар вредности различитих типова и читати сваку без кастовања. Сами обликујте API.
Критеријум провере: Показати пар String/Integer и пар String/String. Додавање броја на место текста треба да буде грешка компајлирања; објаснити политику према null.
Предати мали Main са демонстрацијом и кратко образложење одлука. У овом делу
нису задати називи класа или обавезни обрасци; образложено једноставније решење
је прихватљиво. Најпре дефинисати уговор и очекивани резултат, па имплементирати.