为什么使用范性
让代码变得优雅
范性与构造函数
Set<String>.from(names);var views = Map<int, View>();
范性集合
var list = <String>{"a", "b"};var set = <String>["a", "b"];var map = <String, String> {"x1": "y1","x2": "y2",};
范性方法
方法的范性声明在方法名称后<T>声明
main() {GenericsTest g = GenericsTest();print(g.getData(23));print(g.getData("Test"));print(g.getData(true));}class GenericsTest {T getData<T>(T val) {return val;}}
当然,和Java一样,也可以同时声明多个范性名称
范性类
和方法不一样的是,声明在类名上,从本质上想,方法也是一个Function对象,所以声明形式上无本质区别
abstract class GenericsTest<T extends Object> {T getKey(String key);void setByKey(String key, T value);}
同时 <T extends Object> 可以限制参数的类型,为指定类型或其子类
abstract class GenericsTest<T extends Object> {T getKey(String key);void setByKey(String key, T value);}class GenericsTestImpl<T extends Object> implements GenericsTest<T> {@overrideT getKey(String key) {// TODO: implement getKeythrow UnimplementedError();}@overridevoid setByKey(String key, T value) {// TODO: implement setByKey}
