Data limite de entrega: 6 de Junho
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.
-
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âmetrojson
não contenha a representação de um array. -
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
.
-
Implemente dois novos método
parseFolderEager(path: String): List<T?>
eparseFolderLazy(path: String): Sequence<T?>
que retornam uma lista ou uma sequência lazy, onde cada elemento é o resultado de aplicarparseObject
sobre o conteúdo de cada ficheiro presente na pastapath
. -
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
.