栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java——泛型和包装类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java——泛型和包装类

文章目录
  • 一、泛型
    • 1、泛型方法
    • 2、泛型类
    • 3、类型通配符
  • 二、包装类
    • 1、装箱与拆箱

一、泛型
  • Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
  • 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现? 答案是可以使用 Java 泛型。

Java中的泛型标记符:

  • E(Element):在集合中使用,因为集合中存放的是元素。
  • T(Type):Java类
  • K(Key):键
  • V(Value):值
  • N(Number):数值类型
  • ?:表示不确定的Java类型
1、泛型方法
public class Test {
        // 泛型方法 printArray
        public static  void printArray( E[] inputArray )
        {
            // 输出数组元素
            for ( E element : inputArray ){
                System.out.printf( "%s ", element );
            }
            System.out.println();
        }

        public static void main( String args[] )
        {
            // 创建不同类型数组: Integer, Double 和 Character
            Integer[] 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 ); // 传递一个字符型数组
        }
}

2、泛型类
public class Box {

    private T t;

    public void add(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }

    public static void main(String[] args) {
        Box integerBox = new Box();
        Box stringBox = new Box();

        integerBox.add(new Integer(10));
        stringBox.add(new String("CSDN"));

        System.out.printf("整型值为 :%dnn", integerBox.get());
        System.out.printf("字符串为 :%sn", stringBox.get());
    }

1

3、类型通配符

类型通配符一般是使用 ? 代替具体的类型参数。例如 List 在逻辑上是 List,List 等所有 List<具体类型实参> 的父类。

public class GenericTest {
    public static void main(String[] args) {
        List name = new ArrayList();
        List age = new ArrayList();
        List number = new ArrayList();

        name.add("icon");
        age.add(18);
        number.add(314);

        getData(name);
        getData(age);
        getData(number);

    }

    public static void getData(List data) {
        System.out.println("data:" + data.get(0));
    }
}


注: 因为 getData() 方法的参数是 List 类型的,所以 name,age,number 都可以作为这个方法的实参,这就是通配符的作用。

  • 泛型的作用是编译期间的一种机制,运行期间没有泛型的概念。
  • 泛型的代码在运行期间,会将类型擦除掉,底层实际上使用的还是Object实现的,但是用户不需要在代码中做强制的类型转换。

二、包装类

在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。
基本数据类型对应的包装类型:

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

注: 除了 Integer 和 Character, 其余基本类型的包装类都是首字母大写

1、装箱与拆箱
	int i = 10;
    
    //装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中
    Integer integer = Integer.valueOf(i);
    Integer integer1 = new Integer(i);
    
    //拆箱操作,将 Integer 对象中的值,放到一个基本数据类型中
    int j = integer;

为了减轻开发者的负担,Java提供了自动装箱和拆箱的机制。

int i = 10;

// 自动装箱
Integer integer  = i; 
Integer integer2  = (Integer)i; 

// 自动拆箱
int j = integer; 
int k = (int)integer;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361856.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号