Java泛型(类、接口、方法、集合)

Java泛型

概述

Java泛型是jdk1.5版本以后引入的一个新特性,其本质是参数化类型,也就是把类型作为参数传递;

常见的形式有泛型类、泛型接口、泛型方法、泛型集合;

语法:

​ < T > T 称之为类型占位符,表示一种引用类型,(当然<>里边可以是其他字母,在实际应用中会转为具体的类型);

好处:

  • 提高代码的重用性,如重载
  • 防止类型转换异常,提高代码安全性

泛型类

泛型类的声明,就是在类名后面添加类型参数声明。类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。

泛型类的一个泛型参数,也被称为一个类型变量,用于指定一个泛型类型名称的标识符,这些类被称为参数化的类或参数化的类型。

语法:类名 < T >

代码:

//声明泛型类
public class MyGeneric<T> {
    
    
    //使用泛型
    //创建变量
    T t;

    //作为方法参数创建方法
    public void method(T t) {
    
    
        System.out.println(t);
    }

    //作为方法返回值使用
    public T method2() {
    
    
        System.out.println(t);
        return t;
    }
//测试类
public class Test {
    
    
    
    public static void main(String[] args) {
    
    
        //使用泛型类创建对象
        //<>里给出具体实际的参数类型
        MyGeneric<String> myGeneric = new MyGeneric<String>();
        myGeneric.t=("Hello Generic!");
        String s = myGeneric.method2();
        myGeneric.method("你好,泛型");
    }
}

输出结果:

Hello Generic!

你好,泛型

泛型接口

泛型接口的声明,就是在接口名后面添加类型参数声明,其和泛型类相似。

语法:接口名 < T >

代码:

//泛型接口
public interface MyInterface<T> {
    
    

    String name = "张三";

    T server(T t);
}
//实现类
public class MyInterfaceImpl implements MyInterface<String> {
    
    

    @Override
    public String server(String s) {
    
    
        System.out.println(s);
        return s;
    }
}
//测试类
public class Test {
    
    

    public static void main(String[] args) {
    
    
        MyInterfaceImpl myInterface=new MyInterfaceImpl();
        myInterface.server("你好,泛型");
    }
}

输出结果:

你好泛型

ps:如果在实现接口的时候不确定类型,依旧使用泛型接口,在最后实例化的时候再进行类型确定,则可以有如下实现:

//实现类2
public class MyInterfaceImpl2<T> implements MyInterface<T> {
    
    

    @Override
    public T server(T t) {
    
    
        System.out.println(t);
        return t;
    }
}
//测试类
public class Test {
    
    

    public static void main(String[] args) {
    
    
        MyInterfaceImpl2<String> myInterface2=new MyInterfaceImpl2<String>();
        myInterface2.server("你好,泛型");
    }
}

输出结果:

你好,泛型

泛型方法

泛型方法的声明,就是在 方法返回值类型前面 添加类型参数声明。

语法:< T > 方法返回值类型

代码:

一个普通类下创建的泛型方法,返回值为T;

public <T> T method(T t){
    
    
    System.out.println(t);
    return t;
}
//测试类
public class Test {
    
    

    public static void main(String[] args) {
    
    
        MyMethod myMethod = new MyMethod();
        myMethod.method("你好泛型");
        myMethod.method(520);
        myMethod.method(13.14);
    }
}

输出结果:

你好泛型

520

13.14

ps:泛型类型是由传递的数据所决定的,传递什么类型的数据,泛型类型就是什么类型

泛型集合

概念:参数化类型,类型安全的集合,强制集合元素的类型必须一致。

特点:

  • 编译时即可检查,而非运行时抛出异常;
  • 访问时,不必类型转换(拆箱);
  • 不同泛型之间引用不能相互赋值,泛型不存在多态。

代码:

public static void main(String[] args) {
    
    
    ArrayList<String > list = new ArrayList<String>();
    list.add("你好");
    list.add("中国");
    list.add("我爱你");
    
    //因为ArrayList定义了为String类型,所有就不能添加Integer类型数值
    //list.add(520);

    for (String s:list){
    
    
        System.out.println(s);
    }
}

输出结果:

你好

中国

我爱你


猜你喜欢

转载自blog.csdn.net/ITMuscle/article/details/111313753