泛型:把类型作为变量的值
泛型也可以自定义使用,也有四步骤:
1.泛型的定义:定义在类、定义在方法、定义在成员变量
2.泛型的设置:成员变量、方法参数……
3.泛型的确定:当调用定义的代码时
4.泛型的触发:当调用设置的代码时
package SE03.n2泛型;
import java.util.ArrayList;
public class Demo02Generic {
public static void main(String[] args) {
ArrayList<String> a =new ArrayList();
a.add("小明");
a.add("小王");
a.add("小陈");
for (String object : a) {
String s=(String)object;
System.out.println(s+"abc");
}
Person<Bird<Fly>,Pay> b=new Person<Bird<Fly>,Pay>();
b.play(new Bird<Fly>());
Bird<Fly> bird=new Bird<Fly>();
bird.add(new Fly());
Customer c=new Customer();
Person<Dog,Money> person = new Person<Dog, Money>();
person.setPet(new Dog());
Person<Bird, Money> p1=new Person<Bird, Money>();
p1.setPet(new Canary());
c.callPlayPet(p1);
Person<Bird, Money> p2=new Person<Bird, Money>();
p2.setPet(new Bird());
c.callPlayPet2(p2);
}
}
自定义泛型
Person类
package SE03.n2泛型;
public class Person<Pet,Pay> implements Act<Stand>{
public void play(Pet pet) {
System.out.println("和"+pet+"玩");
}
public <T> void show(T t) {
System.out.println(t);
}
public <T,T2,T3> void show(T t,T2 t2,T3 t3) {
System.out.println(t);
System.out.println(t2);
System.out.println(t3);
}
@Override
public void add(Stand t) {
}
Pet pet;
public Pet getPet() {
return pet;
}
public void setPet(Pet pet) {
this.pet = pet;
}
public void playPet(Pay pay) {
System.out.println("表演玩"+this.pet);
System.out.println("得到报酬"+pay);
}
}
Pay类
package SE03.n2泛型;
public class Pay {
}
Dog类
package SE03.n2泛型;
public class Dog {
@Override
public String toString() {
return "小狗";
}
}
Bird类
package SE03.n2泛型;
public class Bird<T> implements Act<T>{
@Override
public String toString() {
return "小鸟";
}
@Override
public void add(T t) {
}
}
Act接口
package SE03.n2泛型;
public interface Act <T>{
public abstract void add(T t);
}
Stand(Act接口的实现类泛化类型)
package SE03.n2泛型;
public class Stand {
}
Fly类(鸟的Act)
package SE03.n2泛型;
public class Fly {
public Fly() {
System.out.println("飞");
}
}
Canary(继承Bird,可细化至种类)
package SE03.n2泛型;
public class Canary extends Bird{
@Override
public String toString() {
return "金丝雀";
}
}
Customer类
package SE03.n2泛型;
public class Customer {
Money money=new Money();
public void callPlayPet(Person<?extends Bird,Money> p) {
p.playPet(money);
}
public void callPlayPet2(Person<?super Canary,Money> p) {
p.playPet(money);
}
}
Money类
package SE03.n2泛型;
public class Money {
@Override
public String toString() {
return "很多钱";
}
}