- 使用泛型指定入参类型
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
// list.add(213); 使用其他类型会编辑报错
}
- 使用泛型类
- 定义泛型类
public class User<T> {
public T getContent() {
System.out.println("Object的类型为=" + this.content.getClass().getName());
return content;
}
public void setContent(T content) {
this.content = content;
}
public User(T content) {
this.content = content;
}
private T content;
}
- 进行构造方法调用
public static void main(String[] args) {
User<String> userStr = new User<String>("哈哈");
System.out.println("输入的内容="+userStr.getContent());
User<Integer> userInt = new User<Integer>(123);
System.out.println("输入的内容="+userInt.getContent());
}
Object的类型为=java.lang.String
输入的内容=哈哈
Object的类型为=java.lang.Integer
输入的内容=123
- 限制泛型为继承某个类的子类
- 编写用户类
public class User {
private String name;
private Integer age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void say() {
}
}
- 编写Boos类
public class Boos extends User {
@Override
public void say() {
System.out.println("姓名:" + this.getName() + "、性别:" + this.getSex() + "年龄:" + this.getAge() + "职位:领导");
}
}
- 编写Personnel类
public class Personnel extends User {
@Override
public void say() {
System.out.println("姓名:"+this.getName()+"、性别:"+this.getSex()+"年龄:"+this.getAge()+"职位:员工");
}
}
- 编写泛型类
public class Demo<T extends User> {
public T getContent() {
return content;
}
public void setContent(T content) {
this.content = content;
}
private T content;
public Demo(T content){
this.content = content;
System.out.println("输入的类型是="+content.getClass().getName());
}
}
- 编写测试类
public static void main(String[] args) {
Boos boos = new Boos();
boos.setName("范先生");
boos.setAge(20);
boos.setSex("男");
boos.say();
Demo<Boos> boosDemo = new Demo<>(boos);
System.out.println("boosDemo的内容="+boosDemo.getContent());
Personnel personnel = new Personnel();
personnel.setName("赵先生");
personnel.setAge(21);
personnel.setSex("男");
personnel.say();
Demo<Personnel> personnelDemo = new Demo<>(personnel);
System.out.println("personnelDemo的内容="+personnelDemo.getContent());
}
姓名:范先生、性别:男年龄:20职位:领导
输入的类型是=com.example.demo.test.Boos
boosDemo的内容=com.example.demo.test.Boos@5ca881b5
姓名:赵先生、性别:男年龄:21职位:员工
输入的类型是=com.example.demo.test.Personnel
personnelDemo的内容=com.example.demo.test.Personnel@24d46ca6
- 使用通配符泛型
- 创建Boos类
public class Boos {
public Boos(String name, Integer age, String sex) {
System.out.println("姓名:" + name + "、性别:" + sex + "年龄:" + age + "职位:领导");
}
}
- 创建Personnel类
public class Personnel{
public Personnel(String name,Integer age,String sex){
System.out.println("姓名:" + name + "、性别:" + sex + "年龄:" + age + "职位:领导");
}
}
- 进行测试
public static void main(String[] args) {
Demo<Integer> integerDemo = new Demo<>(123);
TestTwo.take(integerDemo);
Demo<Boos> boosDemo = new Demo<>(new Boos("张先生",23,"男"));
TestTwo.take(boosDemo);
Demo<Personnel> personnelDemo = new Demo<>(new Personnel("吴女士",24,"女"));
TestTwo.take(personnelDemo);
}
输入的类型是=java.lang.Integer
输出的内容是=123
姓名:张先生、性别:男年龄:23职位:领导
输入的类型是=com.example.demo.test.Boos
输出的内容是=com.example.demo.test.Boos@5ca881b5
姓名:吴女士、性别:女年龄:24职位:领导
输入的类型是=com.example.demo.test.Personnel
输出的内容是=com.example.demo.test.Personnel@24d46ca6
- 使用泛型方法
- 创建方法并进行方法调用
public static <T> void print(T content) {
System.out.println("输出的内容是=" + content);
System.out.println("输出的类型是=" + content.getClass().getName());
}
public static void main(String[] args) {
TestTwo.print(123);
TestTwo.print("哈哈");
TestTwo.print(236.63);
TestTwo.print(1.0f);
TestTwo.print(new Object());
}
输出的内容是=123
输出的类型是=java.lang.Integer
输出的内容是=哈哈
输出的类型是=java.lang.String
输出的内容是=236.63
输出的类型是=java.lang.Double
输出的内容是=1.0
输出的类型是=java.lang.Float
输出的内容是=java.lang.Object@5ca881b5
输出的类型是=java.lang.Object
网友评论