Seminář 10 - Reflexe; Moduly
Zdroje
- Texty dr. Krajči k semináři o reflexi
- Tutoriál k reflexi.
- K modulům není dostupný obvyklý text umožňující přímočarou náhradu samostudiem.
- Úplné základy modulů.
- Další nutné znalosti k modulům.
- Herbert Schildt, 2022
- Java, The complete Reference, Twelfth Edition
- Knihovna PřF: M2/1756
- Part I, Chapter 12 ( … and Annotations), Chapter 16 (Modules)
- pp. 295 – 315, 421 – 449
- Ukázka ze semináře.
Úkol č. 10
- Vyřešené úkoly zašlete do 30.05.2023 23:59 CEST na email tomas.urbanec@upol.cz s předmětem: JJ2-10.
- Zasílejte pouze zdrojové kódy.
- Pokud chcete zdrojové kódy poslat zkomprimované, použijte buď formát zip nebo kombinaci tar+gz.
Zadání
- Navrhněte anotace, které vám usnadní serializaci a deserializaci jednoduchých objektů do formátu XML. Předpokládejte, že objekty mají bezparametrický konstruktor a pomocí parametru anotace je určený element XML dokumentu pro danou hodnotu.
Metody třídy by mělo být možné označit následovně:
@Serialize(as = "emp")
@Deserialize(as = "emp")
class Employee {
private String name;
private int age;
private double salary;
public Employee() { }
@Deserialize(as = "name")
public void setName(String name) {
this.name = name;
}
@Serialize(as = "name")
public String getName() {
return this.name;
}
@Deserialize(as = "age")
public void setAge(int age) {
this.age = age;
}
@Serialize(as = "age")
public int getAge() {
return this.age;
}
@Deserialize(as = "income")
public void setSalary(int salary) {
this.salary = salary;
}
@Serialize(as = "income")
public int getSalary() {
return this.salary;
}
}
- Implementujte třídu Serializer mající metodu void serialize(Object obj), která využije anotací a vygeneruje XML soubor ve tvaru:
emp>
<name>Tomas Marny</name>
<income>58000</income>
<age>42</age>
<emp> </
- Implementujte třídu Deserializer mající metodu Object deserialize(), která z XML souboru vytvoří daný objekt.
Poznámky
- Třídy Serializer a Deserializer by měly být obecné, tj. musí ukládat nebo načítat libovolné objekty vybavené příslušnými anotacemi. Seznam tříd, se kterými třída Deserializer bude umět pracovat, by jí měl být předán v konstruktoru.
- Můžete použít libovolnou knihovnu pro práci s XML.
- K modulům úkol nemáte, ale můžete je použít ve svých projektech! Pokud to bude navrženo (a provedeno) dobře, tak se to počítá jako jedno pokryté téma.:)