- 泛型
定义:数据类型参数化,提前定义好集合中放入什么类型
集合框架中没使用泛型和使用泛型的比较 -
泛型规则和限制
1、泛型的参数类型只能是引用类型,而不是简单类型,比如<int>是不可使用的
2、可以声明多个泛型参数类型,比如<T、Q、P...>,同时还可以嵌套泛型,如list<<String>>
3、泛型的参数类型可以使用extends语句,例如<T extends superclass>
4、泛型的参数类型可以使用super语句,例如<T super childclass>
5、泛型还可以使用通配符,例如<? extends ArrayListi>
结构
/*
默认的list,此时创建一个mylist,里面的数据类型都可以放,不限制
*/
package javastudy;
import java.util.LinkedList;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List myList=new LinkedList();
myList.add(100);
int x=(int)myList.get(0); //强制转换,将对象转换为int类型
System.out.println(x);
}
}
执行结果
使用泛型,其数据类型只能是integer
package javastudy;
import java.util.LinkedList;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> myList=new LinkedList<Integer>(); //只允许int类型
myList.add(200);
int x=myList.get(0);
System.out.println(x);
}
}
执行结果
- 自定义一个泛型
package javastudy;
import java.util.LinkedList;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
MyTest<String> mt=new MyTest<String>();
mt.setVar("jack");
mt.print();
}
}
class MyTest<T>{ //<>是一个类型,但具体类型没有确定
T vare ;
void setVar(T vare){
this.vare=vare;
}
T getVar(){
return vare;
}
void print(){
System.out.println(vare);
}
}
执行结果
*定义一个类,将泛型类型定义为类
package javastudy;
import java.util.LinkedList;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyTest<Person> mt=new MyTest<Person>();//泛型类型定义为一个类
Person p=new Person("Mark", 25);
mt.setVar(p); //泛型类型定义为一个类
mt.print();
}
}
class MyTest<T>{ //<>是一个类型,但具体类型没有确定
T vare ;
void setVar(T vare){
this.vare=vare;
}
T getVar(){
return vare;
}
void print(){
System.out.println(vare);
}
}
class Person{
@Override
public String toString() { //重写toString方法,调用print的person时,使用toString
// TODO Auto-generated method stub
return "姓名:"+name+",年龄:"+age;
}
String name;
int age;
Person(String name,int age){
this.name=name;
this.age=age;
}
}
网友评论