15.泛型

1.类型参数
 public class Holder<T>
 不用特别指定具体类型。
2.返回多个对象
  元组:将一组对象存在单一对象。也称为数据传送对象。
  public class Tuple<A,B>
3.基本类型无法作为类型参数。
4.泛型方法
   原生类型<T>
  public <T> void  f<T x> 将泛型参数列表置于返回值之前。
  public <T> void  f<T...x>泛型可变参数,不用显式填充数组x
  public static <K,V> Map<K,V> map(){
   return new HashMap<K,V>();
  }
  Map<String,List<String>> sls = New.map();这就是类型参数推断
 
  New.map();//不能编译,不知道类型
  New.<String,List<String>>map();//显式类型说明

5.擦除
  Class c1 = new ArrayList<String>().getClass(); 
  Class c2 = new ArrayList<Integer>().getClass(); 
  c1==c2//true
  Arrays.toString(c1.getTypeParameters())//E
  在泛型代码内部,无法获得任何有关泛型参数类型的信息。
6.边界
  在编写泛型代码时,都要记住它只是一个Object,严格来说是是它的第一边界。
  任何在运行时需要知道确切类型信息的操作都将无法工作。
  T extends Hasf 那么Hasf就是T的第一边界。
7.通配符
  一个数组new Apple[]可以持有Apple及其子类。
  List<Fruit> flist = new ArrayList<Fruit>();//不能写成new ArrayList<Apple>(),
  Apple的List不是Fruit的List,Apple的List可以持有Apple及其子类型,Fruit的list则可以持有任何类型的Fruit。

  List<? extends Fruit> flist = new ArrayList<Apple>();//什么都不能添加,下界不确定。
  从编译器的角度考虑,它要持有Fruit或Fruit的某种子类型,但不知道是那种类型,所以就无法安全的向其中添加任何对象。
  这里虽然指明为Apple,但是编译器并不知道,添加任何类型都是不安全的。
 
  List<? super Apple> flist ;//可以添加Apple及其子类,其下界就是Apple
  List<? super T>可以,<T super Apple>不合法,T是泛型参数,有可能传错。

  无界通配符
  List<Integer>  li = new ArrayList<Integer>;
  li.add(new Integer(12));
  List<?> lu = li;
  lu.add(new Integer(43));//error
  对于lu, 编译器不能对List的类型参数做出足够严密的推理。
  add方法类型安全,但是lu擦除并不能确定所加对象的类型。                        
  引入类型通配符,可以从中检索元素,但是不能添加元素。修改功能的方法比不修改方法需要更多的类型信息。
  lu.clear();可以运行,因为它不依赖类型安全。
 
8.泛型问题
  a.不能保存基本类型
    不能创建ArrayList<int>,可以用ArrayList<Integer>但是性能低。
  b.一个类不能实现同一个泛型接口的两种变体
    如interface Fruit<t>{} 那么
    Class A extends Fruit<Apple> implements Fruit<Orange>{};//error 
    擦除会使两个接口相同。
  c.带有泛型参数的转型和instanceof不会有任何效果
  d.重载
    void f(List<T> v){}
    void f(List<W> v){}
    擦除使两个方法相同。
9.动态类型安全
  容器的ArrayList<Dog> dl = new ArrayList<Dog>();
  虽然有类型安全,但还是有可能加入错的数据。
  @SupressWarning("nochecked")  
  public void addCat(List dogl){
   dogl.add(new Cat());
  }   
  addCat(dl);//这是可以的。
  所以List<Dog> dl2 = Collections.checkList(dl,Dog.class);//加入类型检查
  持续更新中。。。。

2. 关于C#的继承,以下说法正确的是: A. C#支持多重继承 B. C#中一个类只能继承一个类 C. 子类可以继承父类的所有成员 D. 继承的关键词是'implements' \3. 虚方法和抽象方法的区别是: A. 虚方法必须有实现,抽象方法没有 B. 抽象方法可以有实现,虚方法不能 C. 虚方法可以被子类重写,抽象方法不能 D. 抽象方法只能存在于抽象类中,虚方法可以存在于任何类 \4. 接口中不能包含以下哪项? A. 方法 B. 属性 C. 字段 D. 事件 \5. 关于,以下说法错误的是: A. 可以提高代码的重用性 B. 可以用于类、接口、方法 C. 在运行时确定 D. 可以减少装箱和拆箱操作 \6. 下列哪个集合类不是线程安全的? A. ArrayList B. ConcurrentBag<T> C. BlockingCollection<T> D. Hashtable \7. 使用yield return的主要目的是: A. 返回一个值 B. 定义一个迭代器块 C. 退出方法 D. 抛出异常 \8. 以下关于接口的说法,正确的是: A. 接口可以被实例化 B. 接口可以包含静态方法 C. 接口中的方法默认是public和abstract的 D. 一个类只能实现一个接口 \9. 在C#中,以下哪个关键字用于重写父类的虚方法? A. override B. new C. virtual D. sealed \10. 关于约束,以下哪个约束表示类参数必须具有无参构造函数? ​ A. where T : class ​ B. where T : struct ​ C. where T : new() ​ D. where T : base \11. 以下哪个不是C#的基本数据类? ​ A. int ​ B. float ​ C. decimal ​ D. Int32 \12. 以下关于抽象类的说法,错误的是: ​ A. 抽象类不能被实例化 ​ B. 抽象类可以包含非抽象方法 ​ C. 抽象类必须包含至少一个抽象方法 ​ D. 抽象类可以被继承 \13. 以下关于密封类的说法,正确的是: ​ A. 密封类可以被继承 ​ B. 密封类不能被继承 ​ C. 密封类可以是抽象类 ​ D. 密封类不能有实例方法 \14. 以下关于迭代器的说法,错误的是: ​ A. 迭代器可以用于foreach循环 ​ B. 迭代器块必须返回IEnumerable或IEnumerator ​ C. 迭代器块中可以使用yield return和yield break ​ D. 迭代器块中不能有try-catch块 \15. 以下哪个接口定义了GetEnumerator方法? ​ A. IEnumerable ​ B. IEnumerator ​ C. ICollection ​ D. IList \16. 以下关于方法的描述,正确的是: ​ A. 方法必须在类中定义 ​ B. 方法不能有返回值 ​ C. 方法的类参数可以在方法名后面指定 ​ D. 方法不能重载 \17. 以下关于List<T>的说法,错误的是: ​ A. List<T>可以动态调整大小 ​ B. List<T>是线程安全的 ​ C. List<T>可以通过索引访问元素 ​ D. List<T>可以包含重复元素 \18. 以下关于string和StringBuilder的说法,正确的是: ​ A. string是可变的,StringBuilder是不可变的 ​ B. string是不可变的,StringBuilder是可变的 ​ C. 两者都是可变的 ​ D. 两者都是不可变的 \19. 以下哪个关键字用于声明一个常量? ​ A. const ​ B. readonly ​ C. static ​ D. final \20. 以下关于委托的说法,错误的是: ​ A. 委托是一种类,用于定义方法签名 ​ B. 委托可以指向静态方法或实例方法 ​ C. 委托可以指向多个方法,形成调用链 ​ D. 委托不能被继承
08-27
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值