Java基础教程——泛型
2020-12-13 06:25
标签:声明 for can 上界 向上转型 com 教程 imp 情况 Generics:泛型,愿意指“无商标的”。 泛型,可以理解为“宽泛的数据类型”,就是将类型由原来的具体的类型泛化。 泛型在建立对象时不指定类中属性的具体类型,而是在声明及实例化对象时由外部指定。泛型可以提高数据安全性。 List中应用了泛型,在编译期对数据类型进行严格 检查,如果类型不匹配,编译无法通过。 E:Element T:Type 泛型的本质是为了参数化类型,即在不创建新类型的情况下,通过泛型指定的不同类型(类型形参),调用时传入具体的类型(类型实参)。 在使用泛型过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。 泛型接口与泛型类的定义及使用基本相同。 泛型接口的两种使用方法(以ArrayList和Scanner为例): 泛型定义在修饰符和返回类型之间,在参数列表中使用泛型。 说明: 示例【T extends Collection】: >用于承接不同类型的泛型对象。 不知道使用什么类型接收数据时,使用?通配符。 此时只能接收数据,不能往该集合中存储数据。 定义三个类,Fruit->Apple->RedApple,声明ArrayList,有如下现象: 解决方案就是 解决方案如下,照着注释看便是 Java基础教程——泛型 标签:声明 for can 上界 向上转型 com 教程 imp 情况 原文地址:https://www.cnblogs.com/tigerlion/p/11179214.html泛型
示例 :public interface List
泛型类
public class 泛型_类 {
public static void main(String[] args) {
车
泛型接口
public interface Generator
import java.util.*;
interface IGenerics
泛型方法
泛型方法主要针对参数有泛型(如集合)的场景,如果把下例的参数List改为数组则和Object没有太大区别
import java.util.*;
public class 泛型方法 {
public static
泛型的参数类型只能是类类型,不能是简单类型。比如,
>。
泛型的参数类型可以使用extends语句,例如
import java.util.*;
public class 泛型extends {
public static void find(A arg1, int arg2) {
}
public static void main(String[] args) {
find(new ArrayList(), 5);
// 不是Collection的子类,编译不通过:
// find(new String(), 5);
}
}
>通配符
import java.util.*;
public class 泛型_通配符 {
public static void main(String[] args) {
List
通配符界限
extends T>:是 “上界通配符(Upper Bounds Wildcards)”,泛型只能是T的子类/本身
super T>:是 “下界通配符(Lower Bounds Wildcards)”,泛型只能是T的父类/本身
参见:泛型通配符界限问题: https://www.cnblogs.com/tigerlion/p/10659515.html
import java.util.*;
public class 泛型_通配符边界2 {
public static void main(String[] args) {
ArrayList p1 = new ArrayList();
// 【震惊!装得了苹果,装不了红苹果】
// ↓Type mismatch:
// cannot convert from ArrayList
【1. extends Fruit>,定类型继承关系的上界】
【2. super Apple>,确定类型继承关系的下界】
package ah;
import java.util.*;
// 先定义三个类:水果、苹果、红苹果
class Fruit {
}
class Apple extends Fruit {
}
class RedApple extends Apple {
}
public class 泛型_通配符边界 {
public static void main(String[] args) {
ArrayList p1 = new ArrayList();
// 【震惊!装得了苹果,装不了红苹果】
// ↓Type mismatch:
// cannot convert from ArrayList