首页 > 代码库 > 自定义泛型_无多态_通配符无泛型数组_jdk7泛型使用
自定义泛型_无多态_通配符无泛型数组_jdk7泛型使用
T, K, V, E 等泛型字母为有类型, 类型参数赋予具体的值
? 未知类型 类型参数赋予不确定值, 任意类型
只能用在 声明类型上,方法参数上, 不能用在定义泛型类上
上限 extends, 指定类型必须是继承某个子类. 或者实现某个接口
(不是用 implements), 即 <= 如
? extends Fruit
? extends List
不能添加信息
存在以下规则, 如
List<Fruit> 满足 List<? extends Fruit>
List<? extends Apple> 满足 List<? extends Fruit>
下限 supper >=
泛型嵌套
泛型没有多态
实例1 (通配符)
package cn.Douzi.Test03;import java.util.ArrayList;import java.util.List;/* * ? --> 通配符,类型不确定, 用于声明变量 | 形参上 * 不能用在 * 1. 创建对象 * 2. 创建泛型类 泛型方法 泛型接口上 * */public class WildcardsTest { public static void main(String[] args) { //声明 List<?> list = new ArrayList<Integer>(); list = new ArrayList<String>(); list = new ArrayList<Object>(); test(list); //编译错误, 不能创建对象// list = new ArrayList<?>(); } public static void test(List<?> list) { } //不能用在泛型方法上 /*public static void test3(List<?> list) { }*/ class Test<T> { } /* ? 不能创建泛型类上 class Test2<?> { }*/}
package cn.Douzi.Test03;import java.util.ArrayList;import java.util.List;/* * extends : 泛型的上限 <= 即子类 * 1. 一般用于 限制操作 * 2. 不能使用在添加数据上面 一般都是读取操作 * 3. 规则 * List<Fruit> ---> List<? extends Fruit> * List<Apple> ---> List<? extends Fruit> * List<? extends Apple> --> List<? extends Fruit> * 不能存放 * List<?> * List<? extends Object> * */public class ExtendsTest { public static void main(String[] args) { //extends 为上限 Test<Fruit> t1 = new Test<Fruit>(); Test<Apple> t2 = new Test<Apple>(); Test<Pear> t3 = new Test<Pear>(); //调用方法 List<? extends Fruit> list1 = new ArrayList<Fruit>(); test(list1); List<Fruit> list2 = new ArrayList<Fruit>(); test(list2); List<Apple> list3 = new ArrayList<Apple>(); test(list3); // ? extends Apple List<? extends Apple> list4 = new ArrayList<FujiApple>(); test(list4); //? --> 为什么错误,因为 ? 等同于 ? extends Object List<?> list5 = new ArrayList<Object>(); List<? extends Object> list6 = new ArrayList<Object>();// test(list5);// test(list6); List<FujiApple> app = new ArrayList<FujiApple>(); test(app); } // ? extends Fruit public static void test(List<? extends Fruit> list) { //不能添加对象// list.add(new Apple());// list.add(new FujiApple()); list.add(null); } //泛型类 static class Test<T> extends Fruit { }}
package cn.Douzi.Test03;import java.util.ArrayList;import java.util.List;/*** * supper : 泛型的下限 >= 即父类或自身 * 1. 一般用于 下限制操作 * 2. 能够添加数据 一般都是都是 子对象和自己, 不能添加父对象 * 3. 规则 * List<Fruit> ---> List<? supper Fruit> * List<Apple> ---> List<? super Fruit> * List<? Fruit> --> List<? super Fruit> * 不能存放 * List<?> * List<? super FujiApple> --> List<? super Apple> * */public class Supper { public static void main(String[] args) { List<Apple> apple = new ArrayList<Apple>(); test(apple); List<Fruit> list2 = new ArrayList<Fruit>(); test(list2); List<Object> list3 = new ArrayList<Object>(); test(list3); //规则 List<? super Apple> list4 = new ArrayList<Apple>(); test(list4); List<? super Fruit> list5 = new ArrayList<Object>(); test(list5); //编译错误// List<? super FujiApple> list6 = new ArrayList<FujiApple>();// test(list6); // List<?> list7 = new ArrayList<Object>();// test(list7); } public static void test(List<? super Apple> list) { //不能添加父类信息 // list.add(new Apple()); list.add(new FujiApple());// list.add(new Fruit()); }}
实例(泛型嵌套)
package cn.Douzi.Test03;import java.util.Map.Entry;import java.util.HashMap;import java.util.Map;import java.util.Set;/*** * 泛型嵌套 --> 由外到内拆分 * @author Administrator * */public class StudentApp { public static void main(String[] args) { Student<String> stu = new Student<String>(); stu.setScore("优秀"); System.out.println(stu.getScore()); Douzi<Student<String>> douzi = new Douzi<Student<String>>(); douzi.setStu(stu); stu = douzi.getStu(); String score = stu.getScore(); System.out.println(score); //HashMap Map<String, String> map = new HashMap<String, String>(); map.put("a", "Douzi"); map.put("b", "DouDou"); Set<Entry<String,String>> entrySet = map.entrySet(); //增强for循环 for (Entry<String, String> entry : entrySet) { String key = entry.getKey(); String value = entry.getValue(); System.out.println(key + "-->" + value); } }}
实例(泛型没有多态)
package cn.Douzi.Test03;import java.util.ArrayList;import java.util.List;/*** * 1. 泛型没有多态 * 2. 泛型没有数组 * @author Douzi * */public class Polymorphism { public static void main(String[] args) { //多态 Fruit f = new Apple(); //泛型没有多态// List<Fruit> list = new ArrayList<Apple>(); List<? extends Fruit> list = new ArrayList<Apple>(); //没有泛型数组// Fruit<String>[] arr = new Fruit<String>[100];// Fruit[] arr = new Fruit[100]; //可以 //JDK1.7 泛型简化 List<Fruit> list2 = new ArrayList<>(); } }
1. 通配符 ? --> 类型不定, 声明变量上2. 上限 extends <= 不能添加信息 下限 super >= 不能添加父信息3. 泛型嵌套, 由外到内获取即可4. 泛型没有多态, 泛型没有数组5. jdk1.7泛型简化, 创建对象不用指定类型
自定义泛型_无多态_通配符无泛型数组_jdk7泛型使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。