nějaké staré zadání z roku 2022, za správnost odpovědí neručím
Přiřaďte do proměnné cl instanci typu Class reprezentující Integer
..... cl = .....;
Řešení:
Class<Integer> cl = Integer.class;
Mějme následující
Set<String> ss = new HashSet<>(); Set<Object> so = new HashSet<>(); Collection<Object> co = new HashSet<>(); Collection<?> cu = new HashSet<>();
Která přiřazení jsou validní?
A) so = ss;
B) co = so;
C) co = ss;
D) cu = so;
Řešení: B, D
Napište generickou metodu fill(), která nahradí všechny prvky v jakékoli kolekci daným objektem správného typu.
Kolekce má metody size(), removeAll(), add()...... fill(Collection ..... col , ..... obj) {..... }
Řešení:
public <T> void fill(Collection<? super T> col, T obj) {int size = col.size();col.removeAll();for (int i = 0; i < size; i++) {col.add(obj);}
Co vypíše následující kód?
List<String> l1 = new ArrayList<String>(); List<Integer> l2 = new ArrayList<Integer>(); System.out.println(l1.getClass() == l2.getClass());
Řešení: true
Na co se zredukuje následující metoda v rámci erasure mechanismu?
public <T> boolean addAll(Collection<? super T> col, T... elements);
Řešení:
public boolean addAll(Collection col, Object[] elements);
Mějme následující
public @interface RequestForEnhancement {String synopsis();String date() default "[unimplemented]" }
Která použití jsou validní?
A) @RequestForEnhancement
B) @RequestForEnhancement(synopsis = "abcd")
C) @RequestForEnhancement("abcd", "23/05/2022")
D) @RequestForEnhancement(synopsis = "abcd", date = "23/05/2022")
Řešení: B, D
(synopsis nemá default hodnotu, musí být specifikováno, anotace nemají poziční argumenty)
Mějme soubor Foo.java. Které z jeho obsahů by byly validní?
A) public @interface Foo {}
B) public @annotation Foo {String date(); }
C) import java.util.Date; public @interface Foo {Date date(); }
D) public @interface Foo {String date(); }
Řešení: A, D, nevím, jestli ne i C
Co platí pro následující kód?
public class Foo {public <T> T cast(Object o) {return (T) o;} }
A) Nejde přeložit, chyba na řádku 2, generické typy mohou být pouze v hlavičce třídy
B) Nejde přeložit, chyba na řádku 3, nemůžeme přetypovávat generickým typem
C) Přeloží se, kompilátor vyhodí warning na řádku 3
D) Přeloží se bez chyb a bez warningů
Řešení: C
Přiřaďte do proměnné foo instanci třídy, jejíž Class je v proměnné cl a o níž nic dalšího nevíte.
..... cl = getSomeClass(); ..... foo = .....
Řešení:
Class<?> cl = getSomeClass(); Object foo = cl.getInstance();
Lepší by bylo použít konstruktor, ale tohle taky jde.
Mějme dynamické pole implementované podobně jako klasický ArrayList.
Doplňte metodu forEach, která dostane lambda výraz a aplikuje ho na uložené prvky.
Lambda výraz přijímá jeden parametr a nic nevrací. Doplňte také ukázkové použití metody.class MyDynArray { Object[] data;int count; // počet prvků v poli data ..... forEach( ..... ) }
MyDynArray array = new MyDynArray(); array.forEach(.....);
Řešení:
class MyDynArray { Object[] data;int count; // počet prvků v poli data public void forEach(Consumer<Object> lambda) {for (int i = 0; i < count; i++) {lambda(data[i]);}} } MyDynArray array = new MyDynArray(); array.forEach(a -> System.out.println(a));