Java SE菜鸟之泛型



1泛型引入目的:

解决对于两个或多个对象的所有逻辑都一样,只有对象中的某些成员变量的类型不一样

例如:一个类Person成员变量(String name,int age),这时候你想创建一个对象person1(String name,int age)person2(String name,String age)//(仅仅age的类型不同),

(三种方法)

1.你可以创建多个Person(导致类的膨胀,重用性差)

2.你可以将类Personage类型设为Object 类型。这个方法其实不错,但是在你在实例化对象Person person=new Person; person.age=18;,之后你(String)person.age强转的时候编译通过,但在运行的时候出错(安全性问题)

3.你可以引入泛型Person<T>成员变量(String name,T age)//T就是泛型,这时候你在实例化的时候就可以 Person<Integer> person1 = new Person<Integer>();。这时候(T=Integer),即person1.age 的类型就是Integer类型,Person<String> person2 = new Person<String>();的类型person1.age的类型是String类型。这时你强转的时候,编译的时候就不让通,过解决了2的问题。

 

2基本用法:

class Person<T>{

String name;

T age;

public void printIfo(){

System.out.println(name + age);

}

}

 

public class GenClassDemo {

public static void main(String[] args) {

Person<Integer> person1 = new Person<Integer>();

person1.age=18;

person1.name ="小明";

person1.printIfo();

System.out.println(">>>>>>>>>>>>>>>>>>>>>>>");

Person<String> person2 = new Person<String>();

person2.age="18岁";

person2.name ="小明";

person2.printIfo();

}

}

 

 

 

3泛型的特点:

  1. 泛型的类型参数可以是泛型类

    例:()Person<T>(T t,String name)()Gun<T>(T name)

    Person<Gun<String>> person = new Person<Gun<String>> ();

    可以理解为Person<T>属性TGun;Gun<T>TString

  2. 同时设定多个类型参数

    例:Person<K,T...>(K name,T age...)

    Person<String,Integer> person;

    KStringTInteger,nameString类型,ageInteger类型

  3. 泛型的继承

    例:()Person<T>(T name)  (老师)Teacher<K,V>(K name,V other)

    class Teacher<K,V> extends Person<T>

    <>中的位置对应TeacherK 继承PersonT; V是你想要扩展属性

  4. 泛型类可以实现泛型接口

    Interface Print<T>{

    void show(T t);

    T get();

    }

  5. 限制可用类型

    父类(武器)Weapon

    子类()Gun()Knife()Shield

    Person<? extend Weapon>

    意思是?是继承Weapon的类型

    这时候Person<T> T只能是WeaponGunKnifeShield,其他类型都不行

    Person<? super Gun>

    这时候Person<T> T只能是GunWeapon即其父类,其他类型都不行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值