Nech su definovane - rozhranie Spotrebic - Radio - Lampa - Policka na ktorej su spotrebice - main Teraz na jednej policke mozu byt rozne spotrebice. Upravte triedu Policka tak, aby bola genericka, aby na policke mohli byt len spotrebice jedneho druhu. V maine vytvorte dve policky tak, aby na jednu policku bolo mozne ukladat iba radia, na druhu iba lampy. public interface Spotrebic { void zapni(); void vypni(); boolean jeZapnuty(); } public class Radio implements Spotrebic { private boolean zapnuty; public Radio() { this.zapnuty = false; } @Override public void zapni() { zapnuty = true; } @Override public void vypni() { zapnuty = false; } @Override public boolean jeZapnuty() { return zapnuty; } } public class Lampa implements Spotrebic{ private boolean zapnuty; public Lampa() { zapnuty = false; } @Override public void zapni() { zapnuty = true; } @Override public void vypni() { zapnuty = false; } @Override public boolean jeZapnuty() { return zapnuty; } } public class Policka { private Spotrebic[] spotrebiceNaPolicke; public Policka() { spotrebiceNaPolicke = new Spotrebic [100]; } public void pridaj(Spotrebic spotrebic) { for (int i = 0; i < spotrebiceNaPolicke.length; i++) { if( spotrebiceNaPolicke[i] == null ) { spotrebiceNaPolicke[i] = spotrebic; return; } } } public int dajPocetZapnutych() { int pocet = 0; for(Spotrebic spotrebic : spotrebiceNaPolicke) { if( spotrebic != null && spotrebic.jeZapnuty()) { pocet ++; } } return pocet; } } public static void main(String[] args) { Policka polickaSRadiami = new Policka(); Policka polickaSLampami = new Policka(); Radio r1 = new Radio(); Radio r2 = new Radio(); Radio r3 = new Radio(); Radio r4 = new Radio(); r1.zapni(); Lampa l1 = new Lampa(); Lampa l2 = new Lampa(); Lampa l3 = new Lampa(); Lampa l4 = new Lampa(); l1.zapni(); l2.zapni(); l3.zapni(); polickaSRadiami.pridaj(r1); polickaSRadiami.pridaj(r2); polickaSRadiami.pridaj(r3); polickaSRadiami.pridaj(r4); polickaSRadiami.pridaj(l1); //nesmie ist skompilovat polickaSLampami.pridaj(l1); polickaSLampami.pridaj(l2); polickaSLampami.pridaj(l3); polickaSLampami.pridaj(l4); polickaSLampami.pridaj(r1); //nesmie ist skompilovat System.out.println(polickaSRadiami.dajPocetZapnutych()); System.out.println(polickaSLampami.dajPocetZapnutych()); } -------------------------------------------------------------------------------- Nech je definovana trieda Schranka. V triede TypeInfo doplnte deklaraciu metody dajNazovTriedyPrvkuVSchranke tak, aby bola genericka. Doplnenie vykonajte dvoma sposobmi a) pouzitim b) pouzitim Otestujte metodu spustenim mainu public class Schranka { private T ulozenaInstancia; public void uloz(T objekt) { ulozenaInstancia = objekt; } public T daj() { return ulozenaInstancia; } } public class TypeInfo { public static String dajNazovTriedyPrvkuVSchranke(Schranka schranka) { return schranka.daj().getClass().getName(); } public static void main(String[] args) { Schranka text = new Schranka<>(); Schranka cislo = new Schranka<>(); text.uloz("abcd"); cislo.uloz(10); System.out.println(TypeInfo.dajNazovTriedyPrvkuVSchranke(text)); System.out.println(TypeInfo.dajNazovTriedyPrvkuVSchranke(cislo)); } } -------------------------------------------------------------------------------- Preco tato tried nie je kompilovatelna? Ak neviete odpoved pouzite kompilator. public class Trieda { private Trieda() { } public static Trieda vytvorInstanciu() { return new Trieda<>(); } } -------------------------------------------------------------------------------- Nech su definovane triedy - GeometrickyUtovar - Obdlznik - Schranka Ktore riadky v maine su kompilovatelne? Na ktorych riadkoch vznikne (moze vzniknut) chyba za behu? public class GeometrickyUtvar { } public class Obdlznik extends GeometrickyUtvar { } public class Schranka { private T ulozenaInstancia; public void uloz(T objekt) { ulozenaInstancia = objekt; } public T daj() { return ulozenaInstancia; } } public static void main(String[] args) { Schranka s1 = new Schranka<>(); Schranka s2 = new Schranka(); Schranka s3 = new Schranka(); Schranka s4 = new Schranka(); Schranka s5 = new Schranka(); s1.uloz(new Obdlznik()); s2.uloz(new GeometrickyUtvar()); s3.uloz(new Obdlznik()); s4.uloz(new Obdlznik()); s4.uloz("retazec"); Obdlznik obdlznik = (Obdlznik) s4.daj(); String retazec = (String) s4.daj(); }