/**
*
* 泛型的好处:
* 1.把运行时出现的问题提前至编译时
* 2.避免了无谓的强制类型转换。
*
* 泛型在集合中的应用正确的:
* ArrayList<String> list=newArrayList<String>();
* ArrayList<object> list=new ArrayList<String>(); false
* ArrayList<String> list=new ArrayList<object>(); false
*
* 考虑新老系统的兼容性。
* ArrayList<String> list=new ArrayList();
* ArrayList list=new ArrayList<String>();
*
*
*注意:
* 泛型中没有多态的概念,两边的数据必须一致。或者致谢一边的类型。
*推荐使用:两边的数据类一致。
*/
/*
* 自定义泛型:自定义泛型可以理解为一个数据类型的占位符,或者可以理解为是一个数据类型的变量。
*
* 泛型方法:
*
* 泛型方法的定义格式:
* 修饰符:<声明自定义泛型>返回值类型,函数名(形参列表。。){
*
* }
*
* 1.在方法上自定义泛型的具体数据类型是调用该方法的时候传入实参的确定的。
* 2.自定义泛型使用的标示符只要符合表示的命名规则即可。
*
* 需求:定义一个函数可以接受任意类型的参数,要求函数的返回值类型与实参的数据类要求一致。
*
*
*/
public class demo2 {
publicstatic void main(String[] args) {
inti=print(12);
Stringstr=print("sdfsd");
}
// <T>把T字符声明为自定义的泛型。
publicstatic <T> T print(T o) {
returno;
}
}
/*
* 自定义泛型类定义格式:
*
* class 类名<声明自定义的泛型>{
*
*
* }
*
* 注意的事项:
* 1.在类上自定义的泛型的具体数据类型是在创建具体类型时指定的。
* 2.在类上自定义了泛型,如果创建该类的对象时没有指定具体类型,那么默认为object类型。
*
*自定义一个集合对象
*
*/
classmyList<T>{
Object[] arr=new Object[10];
intindex=0;
publicmyList(){
}
publicvoid add(T o){
arr[index++]=o;
}
}
public class demo3 {
publicstatic void main(String[] args){
myList<String>list=new myList<String>();
list.add("123");
myListlist2=new myList();
list2.add(123);
}
}
/*
* 泛型接口:
*
* 泛型接口的定义格式:
*
* interface 接口<声明自定义泛型>{
*
* }
*
* 自定义泛型接口注意事项:
* 1.在接口自定义泛型具体的数据类型是在实现时指定的。
* 2.不指定类型,默认为Object类型。
*
* 如果想在创建接口实现类对象的时候在指定接口自定义泛型的具体数据类型?
*
*
*
*/
interfaceDao<T>{
publicvoid add(T t);
publicvoid remove(T t);
}
public classdemo4<T> implements Dao<T> {
publicstatic void main(String[] args){
newdemo4<String>();
}
@Override
publicvoid add(T t) {
//TODO Auto-generated method stub
}
@Override
publicvoid remove(T t) {
//TODO Auto-generated method stub
}
}