public class GeneStu {
/*Person:1.身高;2.体重;
*该两种属性都有可能是int或者double
*1,身高cm; int 2,体重kg double
*2,身高 m; double 2,体重 kg double
*泛型:将类型以参数的形式传入一个类或者方法,限制类型的使用
*类的泛型的定义:
*类名<泛型1,泛型2......>
*泛型的使用:
*类名<实际类型1,实际类型2> 引用 = new 类名<实际类型1,实际类型2>();
*泛型的作用;用于在编译期的时候检查类型,限制类型
*泛型的原理:泛型是基于擦除机制设计的,在编译器的时候检查类型,但是在编译结束后,被擦除;
*虚拟机不认识泛型,在字节码文件里没有泛型,作为Object处理
*方法的泛型:
*<泛型1,泛型2> 返回值类型 方法名();
*方法泛型的使用 引用.<实际类型>方法名() 类名.<实际类型>方法名()
*注意:当在调用方法的时候传入泛型的实际类型,那么,this和类名不能省略
*拓展:
*1.泛型 extends 其他类名(可以是泛型,可以是具体类型),在定义泛型的同时限制泛型的范围,必须是指定类型的子类型或者本类型
*2. ?通配符(作用于引用类型的定义,限制具体对象的泛型)
*2.1 ? extends 类型A 表示具体对象的泛型必须是类型A的子类型,或者类型A
*2.2 ? super 类型A 表示具体对象的泛型必须是类型A的父类型或者类型A
*/
public static void main(String[] args)
{
Person<CharSequence,Integer> per = new Person<CharSequence,Integer>();
per.test();
//per.setHeight("5");
//String inte = per.getHeight();
per.<String>test1("5");
Person<? extends CharSequence,Integer> person = new Person<String,Integer>();
Person<? super SimpleDateFormat,Integer> person1 = new Person<DateFormat,Integer>();
}
}
/*Person:1.身高;2.体重;
*该两种属性都有可能是int或者double
*1,身高cm; int 2,体重kg double
*2,身高 m; double 2,体重 kg double
*泛型:将类型以参数的形式传入一个类或者方法,限制类型的使用
*类的泛型的定义:
*类名<泛型1,泛型2......>
*泛型的使用:
*类名<实际类型1,实际类型2> 引用 = new 类名<实际类型1,实际类型2>();
*泛型的作用;用于在编译期的时候检查类型,限制类型
*泛型的原理:泛型是基于擦除机制设计的,在编译器的时候检查类型,但是在编译结束后,被擦除;
*虚拟机不认识泛型,在字节码文件里没有泛型,作为Object处理
*方法的泛型:
*<泛型1,泛型2> 返回值类型 方法名();
*方法泛型的使用 引用.<实际类型>方法名() 类名.<实际类型>方法名()
*注意:当在调用方法的时候传入泛型的实际类型,那么,this和类名不能省略
*拓展:
*1.泛型 extends 其他类名(可以是泛型,可以是具体类型),在定义泛型的同时限制泛型的范围,必须是指定类型的子类型或者本类型
*2. ?通配符(作用于引用类型的定义,限制具体对象的泛型)
*2.1 ? extends 类型A 表示具体对象的泛型必须是类型A的子类型,或者类型A
*2.2 ? super 类型A 表示具体对象的泛型必须是类型A的父类型或者类型A
*/
public static void main(String[] args)
{
Person<CharSequence,Integer> per = new Person<CharSequence,Integer>();
per.test();
//per.setHeight("5");
//String inte = per.getHeight();
per.<String>test1("5");
Person<? extends CharSequence,Integer> person = new Person<String,Integer>();
Person<? super SimpleDateFormat,Integer> person1 = new Person<DateFormat,Integer>();
}
}
class Person<T,K>{
private T height;
private K weight;
public Person(){}
public Person(T height, K weight)
{
super();
this.height = height;
this.weight = weight;
}
public T getHeight()
{
return height;
}
private K weight;
public Person(){}
public Person(T height, K weight)
{
super();
this.height = height;
this.weight = weight;
}
public T getHeight()
{
return height;
}
public void setHeight(T height)
{
this.height = height;
}
{
this.height = height;
}
public K getWeight()
{
return weight;
}
{
return weight;
}
public void setWeight(K weight)
{
this.weight = weight;
}
{
this.weight = weight;
}
@Override
public String toString()
{
return "Person [height=" + height + ", weight=" + weight + "]";
}
public void test(){
Object str = "123";
//Integer inte = (Integer)str;
T t = (T)str;
System.out.println(t);
this.<String>test1("7");
}
public static <Q>void test1(Q q){
//T t = new T();泛型不能生成对象
//T[] arr = new T[];不能生成泛型数组
}
public static void test2(){
Person.<String>test1("5");
public String toString()
{
return "Person [height=" + height + ", weight=" + weight + "]";
}
public void test(){
Object str = "123";
//Integer inte = (Integer)str;
T t = (T)str;
System.out.println(t);
this.<String>test1("7");
}
public static <Q>void test1(Q q){
//T t = new T();泛型不能生成对象
//T[] arr = new T[];不能生成泛型数组
}
public static void test2(){
Person.<String>test1("5");
}
}
}
更多Java知识请访问:
JAVA WEB 项目教程-模仿天猫整站 J2EE版