泛型

泛型

泛型的好处
  • 提高安全性(将运行期的从错误转换到编译期)
  • 省去强转的麻烦
泛型基本使用
  • <>中放置的必须是引用数据类型
注意事项
  • 前后泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)
import java.util.ArrayList;
import java.util.Iterator;
import com.mephisto.bean.Student;

public class Demo6 {

	public static void main(String[] args) {
		// 菱形泛型
		// 泛型一般不定义成Object, 因为Object是顶层类
		ArrayList<Student> list = new ArrayList<>();
//		list.add(100);
//		list.add(true);
		list.add(new Student("张三", 18));
		list.add(new Student("李四", 18));
		Iterator<Student> iterator = list.iterator();

		while (iterator.hasNext()) {
			// 向下转型
			// next 方法只能调用一次, 若调用多次,指针也会向下多次
			// Student student = (Student) iterator.next();
			Student student = iterator.next();
			System.out.println(student.getName() + " " + student.getAge() );
		}
	}
}

泛型类
  • 把泛型定义在类上
格式
public class 类名 <泛型类型1,...>
注意事项

泛型类型必须是引用数据类型

泛型方法
  • 把泛型定义在方法上
格式
public 返回类型 方法名(泛型类型 变量名)  // 方法泛型与类的泛型一致
public <泛型类型> 返回类型 方法名(泛型类型 变量名) //方法泛型与类的泛型不一致
注意事项

静态方法必须声明自己的泛型, 静态方法先于对象创建存在

public static <泛型类型> void print(泛型类型  变量名)
泛型接口
  • 把泛型定义在接口上
格式
public interface 接口名<泛型类型>
泛型实例
public class Demo4 {

	public static void main(String[] args) {	
		Demo.method("Mephisto");
	}
}

interface Inter<T>{
	public void show(T t);
}


// 推荐使用
class Demo implements Inter<String>{

	@Override
	public void show(String t) {
		System.out.println(t);
	}
	public static void method(String t) {
		System.out.println(t);
	}
	
}
/*
 * 没有必要在实现接口的时候没必要给类加泛型
 class Demo<T> implements Inter<String>{

	@Override
	public void show(String t) {
		System.out.println(t);
	}
	public static void method(String t) {
		System.out.println(t);
	}
	
	}
 */
泛型通配符

任意类型, 没有明确,就是Object类或其他Java类

  • ? extends E
    • 向下限定, E及其子类
  • ? super E
    • 向上限定, E及其父类
增强for循环(foreach)(Jdk1.5)

简化数组和Collection集合的遍历, 底层依赖迭代器(Iterator)

格式
for(元素数据类型 变量 : 数组或Collection集合){
    使用变量即可,该变量就是元素
}
eclipse快捷键
foreach
三种迭代是否可以删除
  • 普通for循环,可以删除,但是索引会漏删 所以要进行 索引--
  • 迭代器,可以删除但是不需使用迭代器自身方法remove,否则会出现并发修改异常
  • 增强for循环不能删除
public static void main(String[] args) {

		// demo1();
		ArrayList<String> list = new ArrayList<>();
		list.add("a");
		list.add("e");
		list.add("e");
		list.add("a");
		list.add("b");
		list.add("b");
		list.add("a");
		list.add("d");
		list.add("d");
		list.add("a");
		list.add("f");
		list.add("f");
		list.add("a");
		
		// 普通for循环删除
		for (int i = 0; i < list.size(); i++) {
			if("b".equals(list.get(i))) {
				// 通过索引删除元素
//				list.remove(i);    // 会漏删
				list.remove(i--);
			}
		}
		System.out.println(list);
		
		// 2. Iterator迭代器删除
		Iterator<String> iterator = list.iterator();
		while(iterator.hasNext()) {
			if("e".equals(iterator.next())) {
				// list.remove("b");   不能使用集合的方法删除, 会出现并发修改异常
				iterator.remove();
			}
		}
		System.out.println(list);
		
		for(Iterator<String> iterator2 = list.iterator(); iterator2.hasNext();) {
			if("f".equals(iterator2.next())) {
				// list.remove("b");   不能使用集合的方法删除, 会出现并发修改异常
				iterator2.remove();
			}
		}
		System.out.println(list);
		
		// 增强for循环, 增强for只能遍历不能删除
		/*
		for (String string : list) {
			if("d".equals(string)) {
				list.remove("d");
			}
		}
		*/
		System.out.println(list);
}
原文地址:https://www.cnblogs.com/mephisto03/p/9473966.html