我想使用 dart 為我的類專案創建一個抽象的 Sort 類,我將使用 MergeSort、QuickSort、Heap 等排序演算法類進行擴展。我撰寫了以下代碼,但我無法創建可以覆寫的抽象靜態排序方法和使用喜歡
Heap.sort(arr)
OR
MergeSort.sort(arr)
有誰知道為什么我不能創建抽象靜態方法,如果您有任何其他方法,請隨時指導我:D
abstract class Sort {
// void sort(List array);
static void sort(List array);
bool isSorted(List array) {
for (int i = 0; array.length > i - 1; i ) {
if (array[i] > array[i 1]) {
return false;
}
}
return true;
}
void swap(arr, i, j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
uj5u.com熱心網友回復:
正如上面鏈接的答案所說,你不能有抽象的靜態方法。
抽象方法只做一件事,它將方法簽名添加到類的介面,實作該介面的其他(非抽象)類必須為其提供實作。抽象方法不添加實作。
靜態方法不是介面的一部分,因此抽象和靜態意味著它根本沒有效果。這是一種沒有實作的方法,沒有人可以實作。所以你不允許這樣做。
要真正擁有代表不同排序演算法的單獨類,只需直接使用實體方法即可。這就是策略物件模式。
abstract class Sorter<T> {
void sort(List<T> values);
int compare(T value1, T value2);
void swap(List<T> values, int index1, int index2) {
T tmp = values[index1];
values[index1] = values[index2];
values[index2] = tmp;
}
}
abstract class HeapSort<T> extends Sorter<T> {
void sort(List<T> values) {
// heap sort algorithm.
}
}
abstract class MergeSort<T> extends Sorter<T> {
void sort(List<T> values) {
// merge sort algorithm.
}
}
mixin ComparableSorter<T extends Comparable<T>> on Sorter<T> {
int compare(T value1, T value2) => value1.compareTo(value2);
}
class ComparableHeapSort<T extends Comparable<T>>
extends HeapSort<T> with ComparableSorter<T> {}
class CustomCompareHeapSort<T> extends HeapSort<T> {
int Function(T, T) _compare;
CustomCompareHeapSort(int Function(T, T) compare) : _compare = compare;
int compare(T value1, T value2) => _compare(value1, value2);
}
關于如何對 API 進行切片并抽象到它的不同部分,有很多選擇。
我建議在開始 API 設計之前弄清楚您想要支持哪些用例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/515862.html
標籤:镖遗产抽象类
上一篇:如何處理包含派生類元素的基類串列
