电脑做网站服务器需要什么软件手机网站 侧边栏导航
news/
2025/10/7 10:49:44/
文章来源:
电脑做网站服务器需要什么软件,手机网站 侧边栏导航,福田网站改版,遂宁移动网站建设#x1f451;专栏内容#xff1a;Java⛪个人主页#xff1a;子夜的星的主页#x1f495;座右铭#xff1a;前路未远#xff0c;步履不停 目录 一、泛型1、什么是泛型2、泛型的语法 二、泛型类的使用1、泛型类的语法2、泛型如何编译的2.1、擦除机制2.2、为什么不能实例化泛… 专栏内容Java⛪个人主页子夜的星的主页座右铭前路未远步履不停 目录 一、泛型1、什么是泛型2、泛型的语法 二、泛型类的使用1、泛型类的语法2、泛型如何编译的2.1、擦除机制2.2、为什么不能实例化泛型类型数组 3、泛型方法 一、泛型
1、什么是泛型
在传统的编程方法中类和方法通常被限定为使用特定的类型。这些类型可能是基础的数据类型如整数、字符等或者是由程序员自己定义的复杂类型。这种方式在处理单一类型数据时很有效但当我们需要编写更加灵活、能够适用于多种数据类型的代码时这种严格的类型限制就变成了一个约束。
泛型就是为了解决这种限制而生的。简单来说泛型可以理解为一种“类型模板”它允许程序员编写的代码能够适应不同的数据类型而不必为每种可能的数据类型都编写一个新版本。
泛型的厉害之处就在于它的灵活性和重用性。你可以写一个泛型方法或类然后在需要的时候用具体的类型去实例化它比如整数、字符串或者是你自定义的任何类型。这样你就可以用同一套代码处理不同类型的数据极大地提高了代码的通用性和可维护性。
2、泛型的语法
泛型的基本语法主要包括以下几个方面 泛型类和接口 在类或接口后面加上T来声明一个泛型类或接口。T是类型参数代表一种未指定的类型。在实例化类或接口时你可以用具体的类型替换它。示例public class BoxT {private T t;public void set(T t) {this.t t;}public T get() {return t;}
}这个例子中Box类可以用任何类型的对象来实例化例如BoxInteger或BoxString。 泛型方法 泛型方法可以定义在普通类中也可以定义在泛型类中。在方法返回类型之前使用T来声明一个泛型方法。示例public T T genericMethod(T t) {return t;
}这个方法可以接受任何类型的参数并返回相同类型的对象。 类型通配符 使用?表示未知类型通常用在参数、字段、局部变量上以及泛型方法的返回类型上。示例public void processElements(List? elements) {for (Object e : elements) {// 处理e}
}List?可以接受任何类型的List。 限定的类型参数 你可以限制类型参数可以接受的类型范围。使用extends关键字来限定类型参数的上界即它必须是特定类或接口的子类型。示例public T extends Number double sum(ListT numbers) {double sum 0.0;for (Number n : numbers) {sum n.doubleValue();}return sum;
}这个方法只接受Number类型或其子类的List。
泛型存在的意义
在编译的时候帮我们进行类型的检查。在编译的时候帮我们进行类型的转换。
二、泛型类的使用
1、泛型类的语法
泛型类类型实参 变量名; // 定义一个泛型类引用new 泛型类类型实参(构造方法实参); // 实例化一个泛型类对象MyArrayInteger list new MyArrayInteger();注意泛型只能接受类所有的基本数据类型必须使用包装类
2、泛型如何编译的
2.1、擦除机制 在编译时Java编译器将所有的泛型类型参数替换掉这个过程就是类型擦除。
泛型类型参数被替换为它们的边界或者Object。如果类型参数是有界的T extends Number编译器将类型参数替换为它的第一个边界。如果类型参数是无界的T编译器将类型参数替换为Object。
Java的泛型机制是在编译级别实现的编译器生成的字节码在运行期间并不包含泛型的类型信息。
2.2、为什么不能实例化泛型类型数组
class MyArrayT {public T[] array (T[])new Object[10];public T getPos(int pos) {return this.array[pos];}public void setVal(int pos,T val) {this.array[pos] val;}public T[] getArray() {return array;}
}public class demo1 {public static void main(String[] args) {MyArrayInteger myArray1 new MyArray();Integer[] strings myArray1.getArray();}
}由于类型擦除的原因不能直接创建一个泛型数组。类型擦除会将泛型类型参数T替换为Object这导致了类型不匹配从而在运行时抛出ClassCastException。
3、泛型方法
语法方法限定符 类型形参列表 返回值类型 方法名称(形参列表) { ... }
例子写一个泛型方法用于交换数组中两个元素的位置
public class GenericMethodTest {// 泛型方法 printArraypublic static E void printArray( E[] inputArray ) {for(E element : inputArray) {System.out.printf(%s , element);}System.out.println();}public static void main(String args[]) {// 创建不同类型数组 Integer, Double 和 CharacterInteger[] intArray { 1, 2, 3, 4, 5 };Double[] doubleArray { 1.1, 2.2, 3.3, 4.4 };Character[] charArray { H, E, L, L, O };System.out.println(整型数组元素为:);printArray(intArray); // 传递一个整型数组System.out.println(\n双精度型数组元素为:);printArray(doubleArray); // 传递一个双精度型数组System.out.println(\n字符型数组元素为:);printArray(charArray); // 传递一个字符型数组}
}
泛型方法可以声明在普通类或泛型类中。泛型方法的声明包括一个类型参数部分跟在方法的修饰符和返回类型之前。类型参数部分是一个尖括号括起来的类型参数列表如T。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930322.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!