泛型和Class类实战

从JDK1.5起,Java的Class类增加泛型功能,允许用泛型限制Class类,如String.class类型实际是Class<String>,使用Class<T>泛型可避免强制类型转换,还包含相关实战内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 点睛

从JDK1.5之后,Java的Class类增加了泛型功能,从而允许使用泛型来限制Class类,例如,String.class 的类型实际上是Class<String>。 使用Class<T>泛型可以避免强制类型转换。

二 实战1

import java.util.*;
import javax.swing.*;

public class CrazyitObjectFactory2
{
    public static <T> T getInstance(Class<T> cls)
    {
        try
        {
            return cls.newInstance();
        }
        catch(Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }
    public static void main(String[] args)
    {
        // 获取实例后无须类型转换
        Date d = CrazyitObjectFactory2.getInstance(Date.class);
        JFrame f = CrazyitObjectFactory2.getInstance(JFrame.class);
    }
}

三 实战2

1 代码

import java.lang.reflect.*;
import java.lang.annotation.*;

public class CrazyitArray
{
    // 对Array的newInstance方法进行包装
    @SuppressWarnings("unchecked")
    public static <T> T[] newInstance(Class<T> componentType, int length)
    {
        return (T[])Array.newInstance(componentType , length);  //①
    }
    public static void main(String[] args)
    {
        // 使用CrazyitArray的newInstance()创建一维数组
        String[] arr = CrazyitArray.newInstance(String.class , 10);
        // 使用CrazyitArray的newInstance()创建二维数组
        // 在这种情况下,只要设置数组元素的类型是int[]即可。
        int[][] intArr = CrazyitArray.newInstance(int[].class , 5);
        arr[5] = "疯狂Java讲义";
        // intArr是二维数组,初始化该数组的第二个数组元素
        // 二维数组的元素必须是一维数组
        intArr[1] = new int[]{23, 12};
        System.out.println(arr[5]);
        System.out.println(intArr[1][1]);
    }
}

2 运行

疯狂Java讲义
12

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值