On 2017-11-23 01:35, Jonathan M Davis wrote:
It would make sense with something like the nodes of a linked list if they
needed access to the container for some reason. Pretty much any case where a
an instance of a nested class is going to be associated with a specific
instance of its parent class and needs access to it would be a canditate.
It's not that uncommon to see cases in C++ or Java where you'd pass a
pointer to the "parent" to an instance of a nested class when it's created,
and having outer built-in is kind of like that.
Personally, I've never had a use for it. I don't even use classes much in D,
since I rarely need inheritance. And as I understand it, most D programs
don't use classes very heavily for that very reason. So, I have no idea how
common it is to use nested classes in this manner, but I expect that someone
has found it useful at some point.
I thought that this meaning of static for nested classes came from Java, but
it's been a while since I've done much with Java, so I don't know.
Yeah, it's very similar in D and Java.
Another example that comes from Java (before version 8) is to have a
class with a nested anonymous class that implements an interface. It's
very common in Java for event handling or similar actions. Other
languages like D or Java 8 would use a delegate/lambda for the same
thing. Something like:
class WindowController
{
Button button;
Window window;
this()
{
button = new Button;
window = new Window;
button.onClick = new class() Clickable {
window.close();
};
}
}
The anonymous class could have been a named class as well and to be able
to access the "window" instance variable of the controller it needs to
have access to the outer context and cannot be static.
--
/Jacob Carlborg