Mike Schilling <mscottschilling@hotmail.com> wrote:
Lew wrote:
Andreas Leitgeb wrote:
In Java, the solution to this usually boils down to anonymous
classes: Iterable<Node> getChildrenIterable() {
final Iterator<Node> it= getChildrenIterator();
return new Iterable<Node>() {
public Iterator<Node> iterator() { return it; }
}
}
(untested!)
Naturally the anonymity is a tangential detail. It's trivial to
give such a class a name, just not usually necessary.
Exactly.
Speaking of which, a semi-tangential question: has anyone ever found
a use for a local class (i.e, a class defined inside a method, just
like an anonymous class, but given a name)? I never have.
I haven't yet had a use for it myself, but I could think of a few:
1) An aesthetic tradeoff: you give that class a name, and in return
you avoid having a line without the "class" keyword but followed
by
a class-body.
2) with a named class you can also have your own constructor with
parameters, while still sugar'ing away the need to pass finals
explicitly. 3) One may instantiate the same class at multiple places
within the same method. (e.g. for a couple of switch-cases.)
All good points. Of course, when any of them apply, you've also got to