Home > OS >  Getting type of another generic type from Dart type parameter
Getting type of another generic type from Dart type parameter

Time:11-30

I would like to make a generic class which only accepts Lists as a type parameter. But I also want the type parameter of the List. Something like this:

class MyClass<L extends List<T>> {
  T foo() {
    // ....
  }
}

The problem is that that does not work. T is not found. But this does:

class MyClass<L extends List<T>, T> {
  T foo() {
    // ....
  }
}

My only issue with this is that I have to always pass in the extra parameter T which should be inferred from the List type.

var instance = MyClass<List<int>>();

var instance = MyClass<List<int>, int>(); // Extra int kind of redundant

Is there any workaround to this?

CodePudding user response:

The solution is similar to the one provided in this question (the same problem, but in Java): basically, you can't do that in Dart. What you can do is

  • create a new subclass:
class MyClass2<T> extends MyClass<List<T>, T> { ... }

or

  • create a factory method:
class MyClass<L extends List<T>, T> {
  static MyClass<List<T>, T> fromList<T>(List<T> list) {
    return MyClass(...);
  }
}
  •  Tags:  
  • dart
  • Related