泛型 (Java)

泛型

Java泛型是 JDK1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的 数据类型被指定为一个参数(type parameter)

这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类泛型接口泛型方法

泛型类 泛型接口

public class className<泛型符号1,泛型符号2...>{} 

public interface interfaceName<泛型符号1,泛型符号2...>{} 

public class className inplements interfaceName<T>{}

如果一个类去实现的接口是泛型接口,实现类也必须是泛型类,而且2和接口保持一致,还可以新增符号

public class Person<T>{} 
public interface List<T> extends Collection<T>{ }

泛型方法

​ 要定义泛型方法,只需将泛型参数列表置于返回值前

​ 使用泛型方法时,不必指明参数类型,编译器会自己找出具体的类型。

​ 泛型方法除了定义不同,调用就像普通方法一样。

public <泛型符号1,泛型符号2...> returnValue funName(){
    
}

泛型方法的调用方式和普通方法一模一样。

public<T> voidf(T x){ 
    System.out.println(x.getClass().get Name()); 
}
注意:

泛型方法:可以是静态的

public static <Y> void test1(){

}

使用泛型作为参数的方法,不能是static修饰

// 使用泛型的方法,会报错
public static void test(E e){
}

泛型通配符 <?>

本质上从同一个泛型类衍生出来的类实例化的对象 类型都是一样 泛型类

因为同一个泛型类衍生出来的多个类之间没有任何关系,也不可以互相赋值,自然 不能互相替换;由此需要对每一个泛型实例进行分别处理,为了解决这个问题可以使用泛型通配符解决

public class Test {
    public static void main(String[] args) {
        Test t = new Test();

        t.test(new Person1<Object>());  // 可传 Person<String> 或者String的父类

        t.test1(new Person1<String>()); // 只能传Person<String>
    }

    // 任意的泛型 Person
    public void test(Person1<? super String> p){
        System.out.println("可传 Person<String> 或者String的父类");

    }

    // 这里只能传  Person<String>
    public void test1(Person1<String> p){
        System.out.println("只能传Person<String>");
    }
}


class Person1<T>{
    private T pet;
}

// 运行结果:
可传 Person<String> 或者其他的
只能传Person<String>

泛型上下边界

为泛型添加上边界,即传入的类型实参必须是指定类型的子类型

​ <? extends 类型 >

为泛型添加下边界,即传入的类型必须是指定类型的父类型

​ <? super 类型 >

泛型的作用

​ 第一是泛化。可以用T代表任意引用类型,Java语言中引入泛型是一个较大的功能增强,不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了,这带来了很多好处。

​ 第二是类型安全。泛型的一个主要目标就是提高Java程序的类型安全,使用泛型可以使编译器知道变量的类型限制,进而可以在更高程度上验证类型假设。如果不用泛型,则必须使用强制类型转换,而强制类型转换不安全,在运行期可能发生ClassCast Exception异常,如果使用泛型,则会在编译期就能发现该错误。

​ 第三是消除强制类型转换。泛型可以消除源代码中的许多强制类型转换,这样可以使代码更加可读,并减少出错的机会。

​ 第四是向后兼容。支持泛型的Java编译器(例如JDK1.5中的Javac)可以用来编译经过泛型扩充的Java程序(Generics Java程序),但是现有的没有使用泛型扩充的Java程序仍然可以用这些编译器来编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值