- 原始类型和向后兼容
没有指定具体类型的泛类型和泛型接口被称为原始类型,用于和早期的java版本向后兼容。
原始类型存在一定的安全隐患,所以一般不使用这种原类型.
- 通配泛型
- 非受限通(?)
- 受限通配(? extends Object)
- 下限通配(? super T)
受限通配
- package cn.huhui.demo06;
-
- import cn.huhui.demo02.GenericStack;
-
- public class AnyWildCardDemo {
-
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- GenericStack<Integer> intStack=new GenericStack<>();
- intStack.push(2);
- intStack.push(-2);
- intStack.push(1);
- print(intStack);
- }
- public static void print(GenericStack<?> stack) {
- while (!stack.isEmpty()) {
- System.out.println(stack.pop()+" ");
-
- }
- }
- }
? extends T 称为受限通配,其中?表示T或T的子类型;
super T 称为下限通配,表示 T或则T的父类型
- package cn.huhui.demo06;
- import cn.huhui.demo02.GenericStack;;
- public class SuperWildCardDemo {
-
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- GenericStack<String> stack1=new GenericStack<>();
- GenericStack<Object> stack2=new GenericStack<>();
- stack1.push("hello");
- stack2.push(5);
- stack2.push("hghhg");
- add(stack1, stack2);
- AnyWildCardDemo.print(stack2);
-
- }
- public static <T> void add(GenericStack<T> stack1,GenericStack<? super T > stack2) {
- while(!stack1.isEmpty()) {
- stack2.push(stack1.pop());
- }
- }
-
- }