package Demo_1_25_泛型; public class Point <T> { // T是Type的简写,可以定义多个泛型,如果没有定义则默认为Object类型,因为Object类可以接收所有数据类型参数。 private T x; private T y; public T getX() { return x; } public void setX(T x) { this.x = x; } public T getY() { return y; } public void setY(T y) { this.y = y; } }
package Demo_1_25_泛型; public class Main { public static void main(String[] args) { Point <Integer> point = new Point<>(); // 此时point对象中的参数全部为Integer类型,泛型定义只能设置引用类型Integer,而不能是int Point <String> point1 = new Point<>(); // 此时point1对象中的参数全部为String类型 point.setX(12); // 自动装箱为Integer类型 int a = point.getX(); // 拆箱:向下转型为int类型 System.out.println(a); } }
通配符概念:
package Demo_1_25_泛型2; public class Message <T> { // T是Type的简写,可以定义多个泛型,定义后所有参数都是T类型 private T content; public Message() { } public Message(T content) { this.content = content; } public T getContent() { return content; } public void setContent(T content) { this.content = content; } }
package Demo_1_25_泛型2; public class Main { public static void main(String[] args) { Message <Integer> msg1 = new Message<>(); msg1.setContent(11); func(msg1); // 传入泛型为Integer类型的引用 /*
puvlic static void fun(Message <String> msg){}
但是有问题,上述方法应该可以所接受任意类型的泛型参数。此时只能接收String类型,而不能接收其它类型 所以需要通配符?来定义方法中的泛型 在 ? 这个通配符的基础之上还有两种小的通配符: ?extends 类名 :设置泛型的上限 表示该泛型只允许定义类名或类名的子类类型 例如:?extends Number :表示该泛型类型值允许设置Number或Number的子类 ?super 类名 :设置泛型的下限 例如:?super String 只能使用String类或其父类类型 */ Message <String> msg = new Message<>(); msg.setContent("www.baidu.com"); func1(msg); // 传入泛型为String类型的引用 } // public static void func(Message msg){}; // msg.setContent(1.2); // 如果没有泛型,就可以在方法中随意修改数据,极其不安全 public static void func(Message <?extends Number> msg) { // 设置泛型的上限:表示该泛型类型值允许设置Number或Number的子类 // 当传入泛型类型不是(Number或Number的子类)的引用时无法使用此方法 System.out.println(msg.getContent()); } public static void func1(Message<?super String> msg) { // 设置泛型的下限 // 当传入泛型类型不是(String或String的父类)的引用时无法使用此方法 System.out.println(msg.getContent()); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)