Этот вопрос может возникнуть из-за неадекватного понимания ООП в Dart, но в любом случае:
Я работал над проектом, для которого один из моих базовых классов расширяет ListBase
с dart:collections
. В некоторых случаях бывает полезно получить отсортированные индексы этих объектов, подобных списку (без их сортировки).
Как родительский класс у меня есть что-то вроде (сильно упрощенное):
abstract class A<T> extends ListBase<T> {
List<T> internalList;
List<int> orderedIndices();
...
}
Примером потомка является что-то вроде:
class B extends A<num> {
...
@override
List<int> orderedIndices() => new List<int>.generate(
internalList.length,(i) => i)..sort(
(i, j) => internalList[i].compareTo(internalList[j]));
}
Например, если экземпляр B
имеет [1, 5, 2, 4, 3]
в качестве internalList
, тогда orderedIndices
вернет [0, 2, 4, 3, 1]
, как и ожидалось.
Я хотел бы поместить код, который реализует orderedIndices
, в определение класса A
, однако, поскольку он будет идентичен любому из потомков A
, пока указанный тип T
равен Comparable
(т.е. определено compareTo
). Однако я не знаю, как это сделать, потому что, не зная типа T
, Дарт не может узнать, действительно ли экземпляры T
действительно Comparable
, и кашляет на compareTo
, если я пытаюсь поставить код в определении A
.
Хотя это сработало бы, я отказываюсь от идеи копировать и вставлять код в потомков того же класса ... Есть ли какой-то способ, которым я могу сказать Дарту в своем определении A
, что T
будет Comparable
?