1.对不特定类型支持
泛型方法
//泛型方法
T getData<T>(T value){
//方法前面的T表示的是泛型,可以用其他字母代替 ,校验返回参数,不写T则不校验
//<T>要求调用方法时指定类型
//()T要求传入参数也是这个类型
//传入什么类型,就返回什么类型
return value;
}
void main(List<String> args) {
print(getData("hello"));
getData<String>("yoyo");//必须用<>类型
}
泛型类
改造普通类成为泛型类
// class MyList{
// List list=[];
// void add(int value){
// this.list.add(value);
// }
// List getList(){
// return list;
// }
// }
//改造成泛型类,在类名,以及类中用到类型的增加T
class MyList{ //T
List list=[]; //T
void add(T value){ //T
this.list.add(value);
}
List getList(){
return list;
}
}
void main(List args) {
MyList l1=new MyList(); //可以省略new num是int 和double父类
l1.add(100);
l1.add(300);
l1.add(500);
l1.add(400);
print(l1.getList());
MyList l2=new MyList(); //可以省略new 不指定类型就是任意
l2.add(“李白”);
l2.add(“杜甫”);
l2.add(“王安石”);
l2.add(“白居易”);
print(l2.getList());
}
泛型接口
abstract class ObjectCache{
getByKey(String key);
void setByKey(String key,Object value);
}
abstract class StringCache{
getByKey(String key);
void setByKey(String key,Object value);
}
abstract class Cache <T>{
getByKey(String key);
void setByKey(String key,T value);
}
class FileCahce<T> implements Cache<T>{
@override
getByKey( key) {
}
@override
void setByKey(String key, T value) {
print("我是FileCahce$key,$value写入了缓存");
}
}
class MemoryCache<T> implements Cache<T>{
@override
getByKey(String key) {
}
@override
void setByKey(String key, T value) {
print("我是MemoryCache$key,$value写入了缓存");
}
}
void main(List<String> args) {
MemoryCache memoryCache=new MemoryCache<Map>();
memoryCache.setByKey("uu", {"N1":"李白"});
}