Skip to content

Latest commit

 

History

History
69 lines (50 loc) · 2.37 KB

jsonaif-part3-sequences-and-generics.md

File metadata and controls

69 lines (50 loc) · 2.37 KB

Enunciado do Trabalho 3 - jsonaif com suporte para sequencias lazy (geradores yield) e genéricos

Data limite de entrega: 6 de Junho

1. Genéricos

Altere a API de JsonParser de modo a que a classe de domínio seja passada num argumento de tipo (i.e. genérico) e evite a utilização explícita de casting (e.g. operador as).

As utilizações apresentadas na primeira coluna do exemplo seguinte devem poder ser reescritas na forma apresentada na segunda coluna:

JsonParser parser = ...
val student = parser.parse(json, Student::class) as Student
val p = parser.parse(json, Person::class) as Person
val ps = parser.parse(json, Person::class) as List<Person>
JsonParser parser = ...
val student = parser.parse<Student>(json)
val p : Person? = parser.parse(json)
val ps = parser.parseArray<Person>(json)

Note que a interface JsonParser passa a disponibilizar um novo método público parseArray para além do parse já existente no Trabalho 1.

2 - Sequencias lazy

  1. Implemente um novo método parseSequence(json: String): Sequence<T?> que retorna uma sequência lazy para o array JSON passado por parâmetro. Lance uma excepção caso o parâmetro json não contenha a representação de um array.

  2. Implemente um teste unitário que verifique o comportamento lazy do método parseSequence. Tire partido da anotação @JsonConvert para associar uma função que permita verificar o momento em que os elementos da sequência são produzidos.

Note que o novo método parseSequence() deve estar disponível a ambas as implementações JsonParserReflect e JsonParserDynamic.

3. Sequencias lazy (OPCIONAL)

  1. Implemente dois novos método parseFolderEager(path: String): List<T?> e parseFolderLazy(path: String): Sequence<T?> que retornam uma lista ou uma sequência lazy, onde cada elemento é o resultado de aplicar parseObject sobre o conteúdo de cada ficheiro presente na pasta path.

  2. Implemente testes unitários que demonstrem que uma alteração de um ficheiro no decorrer de uma iteração sobre o resultado do parseFolder... é visível, ou não, consoante se use a abordagem lazy ou eager.

Assuma que todos os ficheiros têm representações JSON de objectos do mesmo tipo. Lance excepção no caso do objecto JSON ser incompatível com T.