nipunasudha
nipunasudha

Reputation: 2607

Enforce providing <T> in Dart generic method

How can I enforce providing the generic type of a generic method in dart. By default, dart allows us to not provide a generic type at all. And this should be a compile time check to be useful.

myMethod<T>(){} // generic method

myMethod<String>(); // this should be valid at compile 
myMethod(); // this should be a compile error

One solution comes to mind to write an assertion to check the type of T. But then it would be a mess to use this check in every method.

Upvotes: 6

Views: 899

Answers (1)

lrn
lrn

Reputation: 71623

You cannot force people to write a type argument. It's always allowed to omit the type argument, then type inference will infer one for you. Sometimes it will deduce a specific type from the context or arguments. If not, it will "instantiate to bounds" and use the maximal type allowed. In the case where there is no bound on the type parameter, that's Object? or dynamic.

You can disallow that type as argument by giving a bound, like <T extends Object>. Then that bound is what you'll get if no better type argument is provided or inferred.

At run-time, the code cannot tell the difference between an inferred and an explicit type argument. There is no difference.

Upvotes: 4

Related Questions