1:泛型
泛型:可以理解为未知的数据类型 重点理解:类<T> 这个<T>就好比如 是 “类”的别名!!!!!!
1-1 使用泛型方式创建集合
创建集合是默认的类型为Object 弊端就是会出现想不到的异常 比如:一个object集合中 既放了狗 又放了 人 这个集合就不纯净了!
List list = new AarryList() 尽量不要这样去创建集合! ××××××××× 可能会在运行期间报异常!
List<String> list = new ArrayList<String>(); 这样会将异常从运行期提前到编译期,提早发现异常!
类上使用泛型
//泛型简单易懂的实例 public class FanXingDemo<E> { private E name; public E getName() { return name; } public void setName(E name) { this.name = name; } }
//测试代码
public class TestDemo { public static void main(String[] args) { //设成为String类型 FanXingDemo<String> str = new FanXingDemo<String>(); str.setName("hello wo shi String"); System.out.println(str.getName()); //结果 hello wo shi String //设成为Integer类型 FanXingDemo<Integer> intt = new FanXingDemo<Integer>(); intt.setName(1111); System.out.println(intt.getName()); //结果1111 } }
方法上的泛型使用
//注意方法上使用泛型的语法: public <T> void/int/String/对象 方法名() //静态的方法创建格式 public static<T> void/int/String/对象 方法名() public class FanXingDemo{ //方法上使用泛型! public <T> void test(T t){ System.out.println(t); } } //测试代码 FanXingDemo f = new FanXingDemo(); f.test(1); //可以是整型 f.test("hello 我是字符串"); //可以是字符串 f.test(new Baozi()); //可以是对象
接口上使用泛型
//第一种实现 实现接口时就实现 //public class FanXingInterface_Impl implements FanXingInterface<String> { // @Override // public void getAll(String s) { // // } //} //第二种方式 由创建对象的时候去确定使用的类型 public class FanXingInterface_Impl<T> implements FanXingInterface<T>{ @Override public void getAll(T t) { } } //测试代码 //FanXingInterface_Impl<String> s = new FanXingInterface_Impl<String>();
泛型的通配符 ? 注意!!只能作为方法的参数使用!!!!