泛型

java泛型是JDK5引用的一个新特性。反省的本质就是类型参数化,将类型指定为参数进行传递。

 

泛型的好处

1、编译期类型安全。

2、避免了强制类型转换时的异常。

3、一个类可以操作多种类型的数据,提高了代码的复用性。

 

泛型类

/**
 * 泛型类
 * 语法:类名<T>,类型<T,E>.多个参数间用,(逗号)隔开
 * T,V,K,E.通配符。
 *
 * @Author: wangwang
 * @Date: 2022-12-16-0:49
 * @Description:
 */

public class MyGeneric<T> {
    //定义泛型变量。T t不能被实例化,因为在T被具体指定之前,无法判断T是否存在无参构造方法
    T t;

    //使用泛型作为方法参数
    public void show(T t) {
        System.out.println(t);
    }

    //使用泛型作为返回类型
    public T getT() {
        return t;
    }
}
/**
 * 泛型类的使用
 *
 * @Author: wangwang
 * @Date: 2022-12-16-0:56
 * @Description:
 */
public class TextGeneric {
    public static void main(String[] args) {
        //实例化泛型对象
        //使用泛型作为类型传递只能传递引用类型;
        MyGeneric<String> generic = new MyGeneric<>();
        generic.t = "hello word!";
        //调用泛型作为参数的方法
        generic.show("你好!");
        //调用泛型返回值方法
        String str = generic.getT();
        System.out.println(str);

        MyGeneric<Integer> generic1 = new MyGeneric<>();
        //这里因为在编译期间会涉及到类型擦除,将String和Integer进行擦除,去使用到他们的原始类型,也就是Object替代
        generic = generic;
        System.out.println(generic1.getT());
        //不允许不同泛型对象之间相互赋值。
//        MyGeneric<Integer> generic2 = generic;
    }
}

 

泛型接口

 

/**
 * 泛型接口
 * 语法:接口名<T>
 * @Author: wangwang
 * @Date: 2022-12-16-2:08
 * @Description:
 */
public interface MyGenericInterface<T> {

    //定义泛型接口
    T get(T t);
}

1、实现类指定接口类型

/**
 * 泛型接口实现类  指定接口类型
 *
 * @Author: wangwang
 * @Date: 2022-12-16-2:09
 * @Description:
 */
public class MyGenericInterfaceImpl implements MyGenericInterface<String> {
    @Override
    public String get(String s) {
        return s;
    }
}

2、实现类不指定接口类型

/**
 * 泛型接口实现类 不指定接口类型,而是在实例化实现类时去指定
 *
 * @Author: wangwang
 * @Date: 2022-12-16-2:12
 * @Description:
 */
public class MyGenericInterfaceImpl2<T> implements MyGenericInterface<T> {
    @Override
    public T get(T t) {
        return null;
    }
}

泛型接口的使用

        MyGenericInterfaceImpl myGenericInterface = new MyGenericInterfaceImpl();
        String s = myGenericInterface.get("123");//已经指定接口类型为String,所以不能传入其他类型
        System.out.println(s);
        //类型如果不指定,则使用原始类型Object
        MyGenericInterfaceImpl2 myGenericInterfaceImpl2 = new MyGenericInterfaceImpl2();
        Object o = myGenericInterfaceImpl2.get("213");
        System.out.println(o);
        //指定类型为Integer,则不能再传入其他类型
        MyGenericInterfaceImpl2<Integer> myGenericInterfaceImpl21 = new MyGenericInterfaceImpl2<>();
        Integer r = myGenericInterfaceImpl21.get(new Integer(131));
        System.out.println(r);

 

泛型方法

/**
 * 泛型方法
 * 语法:修饰符 <T> 返回类型
 *
 * @Author: wangwang
 * @Date: 2022-12-16-2:28
 * @Description:
 */
public class MyGenericMethod {

    public <T> void get(T t) {
        System.out.println("返回结果:" + t);
    }
}

泛型方法的使用

        MyGenericMethod myGenericMethod = new MyGenericMethod();
        //调用泛型方法不需要去指定类型,它是根据我们传入的参数来判断方法的类型
        myGenericMethod.get("213");
        myGenericMethod.get(1);
        myGenericMethod.get('1');

 

posted @ 2022-12-16 01:10  Amireux-126  阅读(8)  评论(0)    收藏  举报