Tôi muốn tạo danh sách chuyên biệt hơn về phi tiêu. Tôi không thể trực tiếp mở rộng List. Những lựa chọn của tôi là gì?Làm cách nào để mở rộng Danh sách trong Dart?
Trả lời
Có một lớp ListBase trong phi tiêu: bộ sưu tập. Nếu bạn mở rộng lớp này, bạn chỉ cần thực hiện:
get length
set length
[]=
[]
Dưới đây là một ví dụ:
import 'dart:collection';
class FancyList<E> extends ListBase<E> {
List innerList = new List();
int get length => innerList.length;
void set length(int length) {
innerList.length = length;
}
void operator[]=(int index, E value) {
innerList[index] = value;
}
E operator [](int index) => innerList[index];
// Though not strictly necessary, for performance reasons
// you should implement add and addAll.
void add(E value) => innerList.add(value);
void addAll(Iterable<E> all) => innerList.addAll(all);
}
void main() {
var list = new FancyList();
list.addAll([1,2,3]);
print(list.length);
}
Để thực hiện một lớp thực hiện List có một số cách:
- Mở rộng ListBase và thực hiện
length
,operator[]
,operator[]=
vàlength=
:
import 'dart:collection';
class MyCustomList<E> extends ListBase<E> {
final List<E> l = [];
MyCustomList();
void set length(int newLength) { l.length = newLength; }
int get length => l.length;
E operator [](int index) => l[index];
void operator []=(int index, E value) { l[index] = value; }
// your custom methods
}
- Mixin ListMixin và thực hiện
length
,operator[]
,operator[]=
vàlength=
:
import 'dart:collection';
class MyCustomList<E> extends Base with ListMixin<E> {
final List<E> l = [];
MyCustomList();
void set length(int newLength) { l.length = newLength; }
int get length => l.length;
E operator [](int index) => l[index];
void operator []=(int index, E value) { l[index] = value; }
// your custom methods
}
- ủy thác cho một
List
khác vớiDelegatingList
từ quiver package:
import 'package:quiver/collection.dart';
class MyCustomList<E> extends DelegatingList<E> {
final List<E> _l = [];
List<E> get delegate => _l;
// your custom methods
}
- ủy thác cho một
List
khác vớiDelegatingList
từ collection package:
import 'package:collection/wrappers.dart';
class MyCustomList<E> extends DelegatingList<E> {
final List<E> _l;
MyCustomList() : this._(<E>[]);
MyCustomList._(l) :
_l = l,
super(l);
// your custom methods
}
Tùy thuộc vào mã của bạn, mỗi tùy chọn trong số đó có lợi thế. Nếu bạn gói/ủy quyền danh sách hiện tại, bạn nên sử dụng tùy chọn cuối cùng. Nếu không, hãy sử dụng một trong hai tùy chọn đầu tiên tùy thuộc vào thứ bậc kiểu của bạn (mixin cho phép mở rộng một đối tượng khác).
Bạn cũng có thể sử dụng DelegatingList từ gói: collection/wrappers.dart theo cách tương tự với gói từ rung động – lrn
Tôi đang thử tùy chọn thứ hai, nhưng nhận được một lỗi trong IDE 'Base' 'Minin chỉ có thể áp dụng cho lớp | không xác định lớp Base'! –
Sử dụng cách tiếp cận đầu tiên, cách xác định danh sách các danh sách với phương pháp này, tôi không thể định nghĩa' MyCustomList [MyCustomList] ':( –
- 1. Android Danh sách mở rộng
- 2. Làm cách nào để mở rộng danh sách điều hướng trong thanh tác vụ?
- 3. Làm cách nào để mở rộng phạm vi vào danh sách trong vimscript?
- 4. Mở rộng danh sách các danh sách bằng Python?
- 5. Làm cách nào để sắp xếp danh sách các chuỗi trong Dart?
- 6. Làm cách nào tôi có thể so sánh Danh sách để bình đẳng trong Dart?
- 7. Danh sách động tự động mở rộng
- 8. Làm cách nào để mở rộng chuỗi như "1..15,16" vào danh sách các số?
- 9. Làm cách nào để xóa thẻ danh sách đen cho tiện ích mở rộng?
- 10. Tiện ích mở rộng của Chrome + Dart
- 11. Danh sách trước python nhanh mở rộng
- 12. Chế độ xem danh sách mở rộng
- 13. Làm thế nào để tạo ra một danh sách với sự mở rộng cú đúp để
- 14. Mở rộng hàng nhóm theo lập trình trong danh sách mở rộng
- 15. Ẩn chế độ xem Nhóm trong Danh sách mở rộng
- 16. Làm cách nào để mở rộng scala.swing?
- 17. Làm cách nào để mở rộng NSArray?
- 18. Làm cách nào để mở rộng Array.prototype.push()?
- 19. Làm cách nào để lấy danh sách tất cả các tệp có phần mở rộng ESY trong một thư mục?
- 20. Làm cách nào để tìm chỉ mục của danh sách phụ trong danh sách?
- 21. Đồng thời chèn và mở rộng danh sách?
- 22. Làm cách nào để mở rộng các mục IntelliSense?
- 23. cách nhỏ nhất để mở rộng danh sách bằng cách n
- 24. Danh sách menu cây có thể mở rộng
- 25. Mở rộng Danh sách <T> lớp
- 26. Danh sách các phần mở rộng của GHC
- 27. Làm thế nào để thêm hình ảnh trong danh sách mở rộng trong phụ huynh trong android?
- 28. Làm cách nào để dừng Dart .forEach()?
- 29. Android làm cách nào để mở tệp mở rộng .doc?
- 30. mở rộng danh sách thu gọn không theo thứ tự
Câu hỏi được đặt ra cụ thể về các tùy chọn, bạn có thể làm rõ những việc khác bạn có thể làm không? –
@amouravski Tôi rất muốn biết :) –
Tôi đoán hai tùy chọn khác sẽ là triển khai giao diện Danh sách hoặc sử dụng Danh sách làm bản mixin. –