[英]Switching on class type in Dart
我正在尋找在Dart超類中編寫一個函數,該函數根據實際使用它的子類采取不同的操作。 像這樣的東西:
class Foo {
Foo getAnother(Foo foo) {
var fooType = //some code here to extract fooType from foo;
switch (fooType) {
case //something about bar here:
return new Bar();
case //something about baz here:
return new Baz();
}
}
}
class Bar extends Foo {}
class Baz extends Foo {}
其中的想法是我有一些對象,並希望獲得同一(子)類的新對象。
主要問題是fooType
應該是什么類型的? 我的第一個想法是Symbol,它導致簡單的case語句,如case #Bar:
,但我不知道如何使用Symbol填充fooType
。 我能想到的唯一選擇是做一些像Symbol fooType = new Symbol(foo.runtimeType.toString());
但我的理解是,當轉換為javascript時, runtimeType.toString()
將不起作用。 你可以通過使用Mirrors來解決這個問題,但這應該是一個輕量級的庫,所以這些不在桌面上。 Object.runtimeType
返回Type
類的一些內容,但我不知道如何創建Type
I可用於case語句的實例。 也許我錯過了一些更適合這個的Dart庫?
您可以在switch
使用runtimeType
:
class Foo {
Foo getAnother(Foo foo) {
switch (foo.runtimeType) {
case Bar:
return new Bar();
case Baz:
return new Baz();
}
return null;
}
}
在case
語句中,類名是直接使用的(aka .class literal )。 這給出了一個與提到的類對應的Type對象。 因此,可以將foo.runtimeType
與指定的類型進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.