Alguém conhece uma forma de se fazer isso?
Existe um objeto que é uma agenda, e quando sua última tarefa acabar, a agenda não deve mais existir. Por exemplo:
[code]public class Agenda {
int vezesRestantes = 10;
public Tarefa getProximaTarefa() {
... // cria nova tarefa
vezesRestantes--;
return tarefa;
}
}[/code]
A idéia é que quando vezesRestantes chegasse a 0 o objeto não mais existisse. A única maneira que eu vi de fazer isso é tendo uma referência dentro da própria agenda a todos os objetos agenda criados. E antes de retornar agenda, ele fazer um remove(this) desta coleção. Porém não adiantaria este objeto ser um static Collection e o construtor de Agenda se auto colocasse lá. Afinal, externamente pode existir uma referência ao objeto, como no próprio DAO. A idéia é que ele removesse “do DAO” e acho que o objeto ser o próprio DAO não é uma boa agenda.
Ilustrando:
[code]public class Agenda {
private static Collection<Agenda> agendas = new ArrayList<Agenda>();
int vezesRestantes = 10;
public Agenda() {
agendas.add(this);
}
public Tarefa getProximaTarefa() {
... // cria nova tarefa
vezesRestantes--;
if (vezesRestantes <= 0) agendas.remove(this);
return tarefa;
}
}[/code]
não funcionaria, afinal:
Agenda a = new Agenda();
...
a.getProximaTarefa(); // vamos supor que aqui vezesRestantes ficou 0 e ele rodou o agendas.remove(this)
O objeto a ainda existe. Ele apenas não se encontra no Agenda.agendas.