Generics
class ClassName<T> {
ClassName(this.val);
T val = 0;
}
// main
ClassName<int> obj = ClassName(2); You can force the type to be a descendent of a certain class
class ClassName<T extends num> {
ClassName(this.val);
T val = 0;
}
// main
ClassName<int> obj = ClassName(2); // allowed
ClassName<String> obj = ClassName('ben'); // not allowed