0
点赞
收藏
分享

微信扫一扫

Transformer:Attention Is All You Need

RockYoungTalk 2023-04-29 阅读 108
java泛型

目录

1.介绍

2.写在类上泛型

3.方法上泛型

4.写在方法上 ? 泛型

5.写在方法上 有界 ? extends 父级类 泛型

6.写在方法上 有界 泛型 extends 父级类 泛型

7.泛型判断对象类型使用


1.介绍

 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

 假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?

答案是可以使用 Java 泛型

使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。

java 中泛型标记符:

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - TypeJava 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  •  - 表示不确定的 java 类型

java 中泛型标记符: ETK 测试发现没有啥具体用处都是通配符只有 ?号和非? 区别 具体看如下几种写法

  • ? 非? 泛型
  • 有界 无界 泛型

2.写在类上泛型

 

//======================写在类上泛型/======================
static class Fx<N>{//写在类上泛型
     private N pn;
     public void setF(N pn){
         this.pn = pn;
     }
     public N getF(){
         return pn;
     }
 }

 @Test
 public void t19() {
     Fx<String> f = new Fx<>();
     f.setF("99999s");
     log.info("输出泛型类型值:"+f.getF());
 }
 //======================写在类上泛型/======================

3.方法上泛型

 

//======================写在方法上泛型/======================
public <E> void gets(E[] edata){
    for (E c:edata){
        log.info("val = "+c);
    }
}

@Test
public void t192() {
    //泛型可以使用对象,不能使用8中基本类型要用对象例如(可用Integer,不可用 int)
    Integer[] arr = {1,3,5,6,7};
    String[] arr2 = {"ss","szs","ssc"};
    gets(arr);
    gets(arr2);
}

4.写在方法上 ? 泛型

//======================写在方法上 ? 泛型/======================

  public void gets2(List<?> edata){

    for (int i = 0; i < edata.size(); i++) {

        log.info(edata.get(i).toString());

    }

}

  @Test

  public void t193() {

    List<String> arr = new ArrayList<>();

    arr.add("cc");

    arr.add("zz");

    List<Integer> arr2 = new ArrayList<>();

    arr2.add(2);

    gets2(arr);

    gets2(arr2);

  }

  //======================写在方法上 ? 泛型/======================

 

5.写在方法上 有界 ? extends 父级类 泛型

//======================写在方法上 有界 ? extends 父级类 泛型/======================

  public void gets3(List<? extends String> edata){

    for (int i = 0; i < edata.size(); i++) {

        log.info(edata.get(i).toString());

    }

}

  @Test

  public void t194() {

    List<String> arr = new ArrayList<>();

    arr.add("cc");

    arr.add("zz");

    gets3(arr);

  }

  //======================写在方法上 有界  ? extends 父级类 泛型/======================

6.写在方法上 有界 泛型 extends 父级类 泛型

//======================写在方法上 有界 泛型 extends 父级类 泛型/======================

  public <S extends String > void gets4(List<S> edata){

    for (int i = 0; i < edata.size(); i++) {

        log.info(edata.get(i));

    }

}

  @Test

  public void t195() {

    List<String> arr = new ArrayList<>();

    arr.add("cc");

    arr.add("zz");

    gets4(arr);

  }

  //======================写在方法上 有界  泛型 extends 父级类 泛型/======================

7.泛型判断对象类型使用

//======================泛型判断对象类型使用======================

  public <R> void exec(R res){

    if(res instanceof String){

         log.info((String) res);

    }else if(res instanceof Integer){

        log.info(((Integer) res).toString());

    }

}

  @Test

  public void t196() {

    exec("arr");

    exec(900);

  }

  //======================泛型判断对象类型使用======================

ok

持续更新

举报

相关推荐

0 条评论