泛型是一种未知的,不确定的数据类型。 泛型也可以省略,如果省略泛型相当于泛型是Object 泛型之间是没有继承关系的。 比如:ArrayList 不是 ArrayList的父类 如果在定义类的时候,类名后面写上,就表示在类的范围内定义了一个泛型类型T(不确定的数据类型T) 这种未知的类型T等到我们使用这个类的时候就会被确定出来。 这个T可以使用其他字母代替。 泛型好处: 省略了向下转型的代码。 将运行时期的问题提前到了编译时期。 泛型擦除 Java中的泛型都是伪泛型,泛型只在源代码阶段有效,一旦编译,泛型就会消失。 泛型方法 泛型方法的定义格式: 修饰符 <泛型> 返回值类型 方法名(参数列表) { 方法体; return 返回值; } 在方法上定义的泛型,需要等到调用方法的时候才能确定。 public class Factory<T> {/* 定义方法,接收什么类型的参数,就得到什么类型的结果 */public <E> E getSame(E e) { return e;}} 泛型通配符 如果想要接受任何类型类型的泛型,可以使用泛型通配符 ?表示泛型通配符,可以匹配任何类型的泛型。 泛型通配符要放在方法参数位置被动匹配, 不要主动使用。 泛型限定 如果限制泛型通配符的取值范围,那么可以使用泛型限定。 格式: <? extends A>:泛型要么是A类,要么是A类的子类。 上限。 <? super A>: 泛型要么是A类,要么是A类的父类。 下限。 JAVA基础篇 相关 java基础篇 —— JVM,JRE和JDK有什么区别 标签
泛型是一种未知的,不确定的数据类型。
泛型也可以省略,如果省略泛型相当于泛型是Object
泛型之间是没有继承关系的。 比如:ArrayList 不是 ArrayList的父类 如果在定义类的时候,类名后面写上,就表示在类的范围内定义了一个泛型类型T(不确定的数据类型T) 这种未知的类型T等到我们使用这个类的时候就会被确定出来。 这个T可以使用其他字母代替。 泛型好处: 省略了向下转型的代码。 将运行时期的问题提前到了编译时期。 泛型擦除 Java中的泛型都是伪泛型,泛型只在源代码阶段有效,一旦编译,泛型就会消失。 泛型方法 泛型方法的定义格式: 修饰符 <泛型> 返回值类型 方法名(参数列表) { 方法体; return 返回值; } 在方法上定义的泛型,需要等到调用方法的时候才能确定。 public class Factory<T> {/* 定义方法,接收什么类型的参数,就得到什么类型的结果 */public <E> E getSame(E e) { return e;}} 泛型通配符 如果想要接受任何类型类型的泛型,可以使用泛型通配符 ?表示泛型通配符,可以匹配任何类型的泛型。 泛型通配符要放在方法参数位置被动匹配, 不要主动使用。 泛型限定 如果限制泛型通配符的取值范围,那么可以使用泛型限定。 格式: <? extends A>:泛型要么是A类,要么是A类的子类。 上限。 <? super A>: 泛型要么是A类,要么是A类的父类。 下限。 JAVA基础篇 相关 java基础篇 —— JVM,JRE和JDK有什么区别 标签
如果在定义类的时候,类名后面写上,就表示在类的范围内定义了一个泛型类型T(不确定的数据类型T)
这种未知的类型T等到我们使用这个类的时候就会被确定出来。
这个T可以使用其他字母代替。
泛型好处:
省略了向下转型的代码。 将运行时期的问题提前到了编译时期。
省略了向下转型的代码。
将运行时期的问题提前到了编译时期。
泛型擦除
Java中的泛型都是伪泛型,泛型只在源代码阶段有效,一旦编译,泛型就会消失。
泛型方法
泛型方法的定义格式: 修饰符 <泛型> 返回值类型 方法名(参数列表) { 方法体; return 返回值; } 在方法上定义的泛型,需要等到调用方法的时候才能确定。
public class Factory<T> {/* 定义方法,接收什么类型的参数,就得到什么类型的结果 */public <E> E getSame(E e) { return e;}}
泛型通配符
如果想要接受任何类型类型的泛型,可以使用泛型通配符 ?表示泛型通配符,可以匹配任何类型的泛型。 泛型通配符要放在方法参数位置被动匹配, 不要主动使用。
如果想要接受任何类型类型的泛型,可以使用泛型通配符 ?表示泛型通配符,可以匹配任何类型的泛型。
泛型通配符要放在方法参数位置被动匹配, 不要主动使用。
泛型限定
如果限制泛型通配符的取值范围,那么可以使用泛型限定。
格式: <? extends A>:泛型要么是A类,要么是A类的子类。 上限。 <? super A>: 泛型要么是A类,要么是A类的父类。 下限。