Pokročilé programování na platformě Java [Zkouška 10.6.2019]

Uživatelský avatar
LadyMalande
Matfyz(ák|ačka) level I
Příspěvky: 5
Registrován: 27. 1. 2019 21:14
Typ studia: Informatika Bc.

Pokročilé programování na platformě Java [Zkouška 10.6.2019]

Příspěvek od LadyMalande »

Pokročilé programování na platformě Java [Zkouška 10.6.2019] - Hnětynka

1) Object obj = ....
V objektu je přiřazena instance nějaké třídy. Dopište přiřazení tak, aby v s byl název třídy obj.
String s = ........

2) Doplňte kód tak, aby se do m správně přiřadila metoda lookup, když víte, že getMethod(String name, Class<?> ...).
class Foo<T>{
void lookup(T value){}
}
Method m = (new Foo<Integer>()).getClass().getMethod(..................

3)máme List<String> ls, List<Object> lo, Collection<Object> co a Collection<? extends String> cu. Která přiřazení jde udělat?
A) lo = ls;
B) co = lo;
C) co = ls;
D) cu = lo;

4) Mějme tento kud kódu, vyberte pravdivá tvrzení:
class Foo<T super Number>{
private T v;
public Foo(T t){v=t;}
public T get(){};
}
A) Kód jde bez problému přeložit a spustit.
B) Chyba je na 1. řádku, protože třída nemůže mít v generickém typu super.
C) Chyba je na 2. řádku, protože generický typ nelze přiřazovat privátním atributům.
D) Chyba je na 3. řádku, protože generický typ nemůže být typem konstruktoru.
E) Chyba je na 4. řádku, protože T nemůže být návratovým typem metody.

5) Napište, jak bude vypadat kód po erasure:
public static <T extends Comparable<? super T>> T max(Collection<T> coll);

6) Vyberte správné použití anotace:
public @interface RequestForEnhancement {
int id();
String synopsis();
String engineer() default "[...]";
String date() default "[...]";
}
A) @RequestForEnhancement(
id = 285,
synopsis = "Enable time travel",
engineer = "Mr. Peabody",
date = "4/1/3007")
B) @RequestForEnhancement(
id = 285,
synopsis = "Enable time travel")
C) @RequestForEnhancement(
id = 285)
D) @RequestForEnhancement(
id = 285,
synopsis = "Enable time travel",
engineer = "Mr. Peabody")

7) Vyberte správně deklarované anotace
A) public @interface Foo {}
B) public @interface Foo<T> {T value();}
C) public @interface Foo {Foo value();}
D) public @interface Foo {String value();}

8 ) Napište kód, který definuje, že modul foo.bar.baz potřebuje java.logging a žádnou jinou. Jedná se o náplň dokumentu module-info.java.

9) Do proměnné cl uložte classloader třídy java.lang.System. Nezapomeňte proměnné cl přiřadit typ. Pokud classloader přiřadit nejde, napište proč.

10) Napište metodu, která z libovolného pole překopíruje prvky do Collection< ....>


Odpovědi: (Alespoň zhruba)
1) String s = obj.getClass().getName();
2) Tady si dejte velký pozor. Tento příklad je sice ve slidech z 1. přednášky na straně 42, ale není u něj napsáno, že kód na slidu je špatně.
Správná odpověď je tedy getMethod("lookup", Object.class); protože se to provádí za běhu, kde už informace o <Integer> nemáme.
3) Pouze B.
4) Pouze B.
5) public static Comparable max(Collection coll);
6) A, B, D
7) A, D
8 ) module foo.bar.baz {
requires java.logging;
}
9) Asi tak: ClassLoader cl = Class.ForName("java.lang.System").getClassLoader();
10) Třeba takhle:
public <T> void copy(Collection<? super T> col, T[] arr){
for(T a: arr){
col.add(a);
}}
We now have a dog and Alistair is still the dumbest one in the party. - Morrigan
Odpovědět

Zpět na „Ostatní“