原始类型和向后兼容、通配泛类型

来源:互联网 发布:剑网3军娘捏脸数据成女 编辑:程序博客网 时间:2024/06/03 20:40
  • 原始类型和向后兼容


没有指定具体类型的泛类型和泛型接口被称为原始类型,用于和早期的java版本向后兼容。

原始类型存在一定的安全隐患,所以一般不使用这种原类型.


  • 通配泛型


  1. 非受限通(?)
  2. 受限通配(? extends Object)
  3. 下限通配(? super T)

          受限通配

          

  1. package cn.huhui.demo06;
  2.  
  3. import cn.huhui.demo02.GenericStack;
  4.  
  5. public class AnyWildCardDemo {
  6.  
  7. public static void main(String[] args) {
  8. // TODO Auto-generated method stub
  9. GenericStack<Integer> intStack=new GenericStack<>();
  10. intStack.push(2);
  11. intStack.push(-2);
  12. intStack.push(1);
  13. print(intStack);
  14. }
  15. public static void print(GenericStack<?> stack) {
  16. while (!stack.isEmpty()) {
  17. System.out.println(stack.pop()+" ");
  18. }
  19. }
  20. }

          ? extends T 称为受限通配,其中?表示T或T的子类型;


          super T 称为下限通配,表示 T或则T的父类型



  1. package cn.huhui.demo06;
  2. import cn.huhui.demo02.GenericStack;;
  3. public class SuperWildCardDemo {
  4.  
  5. public static void main(String[] args) {
  6. // TODO Auto-generated method stub
  7. GenericStack<String> stack1=new GenericStack<>();
  8. GenericStack<Object> stack2=new GenericStack<>();
  9. stack1.push("hello");
  10. stack2.push(5);
  11. stack2.push("hghhg");
  12. add(stack1, stack2);
  13. AnyWildCardDemo.print(stack2);
  14. }
  15. public static <T> void add(GenericStack<T> stack1,GenericStack<? super T > stack2) {
  16. while(!stack1.isEmpty()) {
  17. stack2.push(stack1.pop());
  18. }
  19. }
  20.  
  21. }
原创粉丝点击