凡科建设网站安全吗,888浏览器手机下载,怎么查在哪个网站做的备案,快设计一、泛型
1 概念
泛型(Generics)#xff0c;广泛的类型。最大用途是给集合容器添加标签#xff0c;让开发人员知道容器里面放到是什么类型#xff0c;并且自动对放入集合的元素进行类型检查。
类比实参和形参#xff0c;我们在对方法中的变量操作时#xff0c;并没有指…一、泛型
1 概念
泛型(Generics)广泛的类型。最大用途是给集合容器添加标签让开发人员知道容器里面放到是什么类型并且自动对放入集合的元素进行类型检查。
类比实参和形参我们在对方法中的变量操作时并没有指明变量的实际大小而是使用变量名来指代。泛型就是这个情况下诞生的通过符号来指代类型等方法调用传入实参时才会明确具体类型。
//当使用这个类时再指明T的类型
class MyClassT{T obj;public T getObj(){return obj;}public void setObj(T obj){this.obj obj;}
}public class Demo{public static void main(){//指明类型是StringMyClassString stringClass new MyClass();//指明类型是DoubleMyClassDouble stringClass new MyClass();//指明类型是IntegerMyClassInteger stringClass new MyClass();}
}
总的来说泛型就是一个参数是类型的参数。泛型的作用把运行时可能存在的强制类型转换风险提前到编译期解决并简化了代码。
2 声明位置和使用位置
泛型类 声明位置类名 T可以使用的位置 成员变量类型非静态成员方法的返回值类型非静态成员方法的参数类型 泛型接口 声明位置接口名 T两种使用情况 class ClassA implements 接口名类型名称, 实现类不再是泛型类class ClassBT implements 接口名T, 实现类还是泛型类 泛型方法 声明位置public static T 返回值类型 方法名(T t)使用位置只能在方法域内部使用示例public static T T show(T t) : 传入什么类型就返回什么类型
3 使用的注意事项
静态域内部不能使用泛型使用泛型类时必须明确泛型类型使用泛型对象时可以省略右边的泛型类型但是不能少了如果使用泛型类时没有指明类型默认是Object类型
4 通配符
? 表示任意的泛型类型 跟原先的T有些区别原先的T的类型对应的是调用时传入的类型。方法泛型需要再返回值前面定义。即public static T 返回值类型 方法名(T t)所以T类似于一个中转站。? extends A 设定类需要继承父类A即上限? super B 设定类需要是子类B的父类即下限
应用场景
设置下限最小也肯定是动物。最大可能是Object。通常用于添加数组不适合获取数据
void test1(List? super Animal list){//适合添加数据list.add(new Animal());list.add(new Cat())//不适合获取得到数据后也要强制类型转换Object o list.get(0);
}设置上限获取到的肯定是动物的子类最大也是动物类
void test1(List? extends Animal list){//适合获取数据Animal a list.get(0);//不能添加数据list.add(new );//无法确定添加什么类型的数据
}?不适合获取也不能添加通常用于翻转复制等操作。
5 通配符?和泛型参数T的区别
通配符?和泛型参数T的区别在于使用的场景和限制。 通配符?是一种不确定的类型可以用来表示任意类型。它可以在方法的参数和返回值类型中使用用来增加灵活性使方法可以接受不同类型的参数。 泛型参数T是一种确定的类型可以在类、方法、接口等定义中使用用来指定某种具体的类型。它可以使代码更加安全和类型正确并提供编译时的类型检查。
具体区别如下
使用范围通配符?可以在方法的参数和返回值类型中使用可以接受不同类型的参数。而泛型参数T可以在类、方法、接口等定义中使用用来指定某种具体的类型。灵活性通配符?可以接受任意类型的参数因此在方法的定义中可以处理多种不同类型的参数。而泛型参数T是一种确定的类型只能处理指定的类型。类型推断通配符?在方法调用时无法推断具体的类型需要手动指定或进行类型转换。而泛型参数T在方法调用时可以根据实际参数类型自动推断具体的类型不需要手动指定。限制通配符?无法获取具体的类型信息只能进行简单的操作。而泛型参数T可以通过反射等方式获取具体的类型信息进行更复杂的操作。
总之通配符?和泛型参数T在使用场景、灵活性和类型推断等方面有所不同。选择使用哪种方式取决于具体的需求和代码逻辑。