Generics 在Dart中使用泛型与返回动态
我有一个抽象类,它为用户存储不同的设置,因此我可以从同一位置引用它们。然后,每当我需要查看他们的设置时,我调用一个函数,将设置的名称(字符串)映射到设置的值。例如:Generics 在Dart中使用泛型与返回动态,generics,dart,dynamic,Generics,Dart,Dynamic,我有一个抽象类,它为用户存储不同的设置,因此我可以从同一位置引用它们。然后,每当我需要查看他们的设置时,我调用一个函数,将设置的名称(字符串)映射到设置的值。例如: abstract class UserPrefs { static bool auto_create; static String favorite_location; // etc } 然后我有一个函数(也在UserPrefs中)来获取相关值,如下所示: static dynamic getSettingFrom
abstract class UserPrefs {
static bool auto_create;
static String favorite_location;
// etc
}
然后我有一个函数(也在UserPrefs
中)来获取相关值,如下所示:
static dynamic getSettingFromString(String name) {
switch (name) {
case 'auto_create': return auto_create;
case 'favorite_location': return favorite_location;
// etc
}
throw UserPrefNotFound('User preference "$name" does not exist.');
}
这很好,但这也很好:
static T getSettingFromString<T>(String name) {
switch (name) {
case 'auto_create': return auto_create as T;
case 'favorite_location': return favorite_location as T;
// etc
}
throw UserPrefNotFound('User preference "$name" does not exist.');
}
static T getSettingFromString(字符串名称){
交换机(名称){
案例“auto_create”:返回auto_create作为T;
案例“收藏夹位置”:将收藏夹位置返回为T;
//等
}
throw UserPrefNotFound('用户首选项“$name”不存在');
}
我想知道两者的潜在优势是什么(在速度、效率等方面),最终的区别是什么。基本上,为什么一个(或一个)比另一个好,使用其中一个会产生我不知道的不可预见的后果。谢谢 我认为这是一个好问题,泛型和
动态
之间的主要区别在于:
泛型仅限于1种类型,而动态则不是,因为它会停止编译器执行“类型检查”
实例:
class Foo<T> {
var bar = List<T>();
var foo = List<dynamic>();
void addBar(T elem) {
bar.add(elem);
}
void addFoo(dynamic elem) {
foo.add(elem);
}
}
var bar = Foo<String>()
..addBar("hello")
..addBar(123); //compile error, you can't add an integer to <string> list
var foo = Foo<String>()
..addFoo("hello")
..addFoo(123); //OK because dynamic accept any type
不使用接口或类型继承
所以下一个问题应该是,对象
和动态
之间有什么区别
你可以在这里找到答案:
dynamic foo = //some type;
if (foo is bool) {
//do somethings
} else if (foo is String) {
//do something else
}