Java泛型了解,什么是类型擦除?介绍常用的通配符

java泛型

java泛型是jdk5中引入的新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员编译时检测非法类型,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为同一个参数。

类型擦除

Java的泛型是伪泛型,这是因为在Java编译期间,会将泛型信息都被擦掉,这就是通常所说的类型擦除
下面展示一些 类型擦除代码片

package com.haina.java12;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) throws Exception{
        List<Integer>list=new ArrayList<>();
        list.add(10);
         //直接添加回报错
        // list.add("hello");
        Class<? extends List> aClass = list.getClass();
        Method add = aClass.getDeclaredMethod("add", Object.class);
        //通过反射添加时可以的
        add.invoke(list,"k1");
        System.out.println(list);
    }
}

在这里插入图片描述

泛型一般有3种使用方式:泛型类,泛型接口,泛型方法

泛型类:

//此处的T可以随便写为任意标识,常见如T K V E等形式的类型表示为参数
//在实例化泛型类时,必须指定具体的参数类型
public class Generic<T> {
private T key;
public Generic(T key) {
this.key = key;
}
public T getKey() {
return key;
}
}
//实例化泛型
Generic<Integer> genericInteger = new Generic<Integer>(123456);

泛型接口:

public interface Generator<T> {
public T method();
}
//实现泛型接口,不指定类型:
class GeneratorImpl<T> implements Generator<T>{
@Override
public T method() {
return null;
  }
}
//实现泛型接口,指定类型:
class GeneratorImpl implements Generator<String>{
@Override
public String method() {
return "hello";
}
}

###泛型方法:

public static <E> void printArray(E[] inputArray) {
for (E element : inputArray) {
System.out.printf("%s ", element);
}
System.out.println();
}
// 创建不同类型数组: Integer, Double 和 Character
Integer[] intArray = { 1, 2, 3 };
String[] stringArray = { "Hello", "World" };
printArray(intArray);
printArray(stringArray);

常用通配符:T,E,K,V,?

  1. ?表明不确定java类型
  2. T表明具体的Java类型
  3. K V分别表示Java键值中的key ,value
  4. E代表Element
  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值