class Node {
List<Node> children;
}
class TreeNode extends Node {
@Override
List<TreeNode> children; // ERROR: could not override writer method.
}
Is there a way to make generic so that:
treeNode.children is List<TreeNode>
>Solution :
Create an abstract Node
class with a generic type parameter T
. This T
will represent the type of children nodes:
abstract class Node<T extends Node<T>> {
List<T> children;
}
T extends Node<T>
means that T
should be a subtype of Node<T>
itself.
Now, let’s create a TreeNode
class that extends Node
and specifies TreeNode
as the type parameter:
class TreeNode extends Node<TreeNode> {
@override
List<TreeNode> children;
}
In this case, TreeNode
extends Node<TreeNode>
, so the children
list will be of type List<TreeNode>
, as you wanted. This way, you’re not overriding the children
property with a different type, but specializing the Node
class for TreeNode
instances.