泛型:
举例使用泛型:
以ArrayLiat为例:
import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; public class GenericTest { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); //要求存放学生成绩 list.add(1); list.add(5); list.add(3); list.add(4); list.add(2); //问题一:在没有使用泛型的时候,类型不安全 //list.add("Tom"); /*for (Object score : list) { //问题二:强制类型转换时,可能出现ClassCastException int stuScore = (Integer) score; System.out.println(stuScore); }*/ //方法一: for (Integer integer : list) { //避免了强转操作 int stuScore = integer; System.out.println(stuScore); } System.out.println(); Collections.sort(list); //方法二: Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } } }
以HashMap为例:
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class GenericTest { public static void main(String[] args) { HashMap<String,Integer> map = new HashMap<String, Integer>(); map.put("ysb",19); map.put("Jack",20); map.put("Ben",18); map.put("Tom",22); map.put("Alan",10); //map.put(123,"ABC"); //泛型的嵌套 Set<Map.Entry<String,Integer>> entry = map.entrySet(); Iterator<Map.Entry<String, Integer>> iterator = entry.iterator(); while(iterator.hasNext()) { Map.Entry<String, Integer> next = iterator.next(); String key = next.getKey(); Integer value = next.getValue(); System.out.println(key + "---->" + value); } System.out.println(map); } }
结果:
自定义泛型结构:
泛型类:
泛型接口:
泛型方法:
泛型类和泛型方法的使用情景:
通过泛型类和方法来操作MySOL。(创建类或方法,添加泛型,可以操作不同的表格)
泛型在继承方面的体现:
通配符的使用:
通配符:?
有限制条件的通配符的使用:
泛型的尝试:
DAO:
import java.util.*; public class DAO<T> { private Map<String, T> map = new HashMap<String, T>(); //保存 T 类型的对象到 Map 成员变量中 public void save(String id, T entity) { map.put(id, entity); } //从 map 中获取 id 对应的对象 public T get(String id) { return map.get(id); } //替换 map 中的 key 为 id 的内容,改为 entity 对象 public void update(String id, T entity) { if(map.containsKey(id)) { map.put(id,entity); } } //返回 map 中存放的所有 T 对象 public List<T> list() { //错误的 // Collection<T> value = map.values(); // return (List<T>) value; ArrayList<T> list = new ArrayList<>(); Collection<T> values = map.values(); for (T t : values) { list.add(t); } return list; } //删除指定 id 对象 public void delete(String id) { map.remove(id); } }
User:
import java.util.Objects; public class User { private int id; private int age; private String name; public User() { } public User(int id, int age, String name) { this.id = id; this.age = age; this.name = name; } public void setId(int id) { this.id = id; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "id=" + id + ", age=" + age + ", name='" + name + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return id == user.id && age == user.age && Objects.equals(name, user.name); } @Override public int hashCode() { return Objects.hash(id, age, name); } }
DAOTest:
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput; import java.util.List; public class DAOTest { public static void main(String[] args) { DAO<User> dao = new DAO<User>(); dao.save("1001",new User(1001,34,"周杰伦")); dao.save("1002",new User(1002,20,"昆凌")); dao.save("1003",new User(1003,25,"蔡依林")); dao.update("1003",new User(1003,30,"方文山")); List<User> list = dao.list(); //System.out.println(list); list.forEach(System.out::println); } }
结果: