学习要点

  • 泛型接口
  • 泛型类
  • 泛型方法
  • 多参数泛型类
  • 泛型类的继承

泛型的定义

允许在定义类、接口、方法时使用类型形参,类型形参将会在声明变量、创建对象或者调用方法时候动态指定。

泛型接口

1  定义

泛型接口就是拥有一个或多个类型参数的接口

2  语法

public interface 接口名<类型形参> {

    类型形参 方法名(类型形参 类型形参实例);

}

3  代码示例

/** 泛型接口 */

public interface IGeneric<T> {

   public T getName(); // T类型由外部决定

   public void setName(T t);// 方法参数类型有外部决定

}

泛型类

1  定义

泛型类就是具有一个或者多个类型参数的类。

2  语法

public class 类名<类型形参>  {

    方法名(类型形参 类型形参实例) {

        方法执行体

    }

}

  

3  示例代码

/** 泛型类 */

public class Person<T> implements IGeneric<T> {// 实现泛型接口

   private T t;

   public Person(T t) {

       this.setName(t);

   }

   @Override

   public T getName() {

       return this.t;

   }

   @Override

   public void setName(T t) {

       this.t = t;

   }

}

/** 测试类 */

public class Test {

   public static void main(String[] args) {

       IGeneric<String> p = new Person<String>("张三");

       System.out.println(p.getName());

   }

}

  

泛型方法

1  定义

泛型方法就是带有类型参数的方法。

泛型的声明,必须在方法的修饰符(public,static,final,abstract等)之后,返回值声明之前。方法中的类型参数作用范围只在方法中。

2  语法

修饰符<类型形参> 返回值 方法名(不指定|类型形参|正常参数,……) {

    方法体

}

  

3  示例代码

/**泛型方法:判断数据类型*/

public class ObjectTypeJudge {

   public <T> void judgeMethod(T t){

       System.out.println("数据类型是:"+t.getClass());//获取类定义信息

   }

}

/** 测试类 */

public class Test {

   public static void main(String[] args) {

       ObjectTypeJudge otj=new ObjectTypeJudge();

       otj.judgeMethod(100);

       otj.judgeMethod("hello");

       otj.judgeMethod(123.4f);

       otj.judgeMethod(321.23);

   }

}

4  测试结果

上机练习

需求描述

  • 定义泛型接口并添加获取字段方法,将类型参数做为此方法返回类型。
  • 定义泛型类实现上述泛型接口,添加一个字段并将类型参数作为字段的类型,在构造函数中初始化此字段。
  • 在main()方法中实例化泛型接口,调用获取字段方法并打印。

多参数泛型类

1  语法

例如Map常用的实现类:HashMap<K,V>属于多个参数的泛型类。

2  示例代码

/**多参数泛型类*/

public class GenericMulPara<T, V> {

   private T a;

   private V b;

   public GenericMulPara(T a, V b) {

       this.a = a;

       this.b = b;

   }

   public void showType() {

       System.out.println("a的类型是" + a.getClass().getName());

       System.out.println("b的类型是" + b.getClass().getName());

   }

}

泛型类的继承

1  定义

  • 面向对象的特性同样适用于泛型类,所以泛型类也可以被继承。
  • 继承了泛型类的子类,必须也是泛型类。

2  语法

class 子类<T>  extends  父类<T>  {

}

  

JavaSE-17 泛型的更多相关文章

  1. 【JavaSE】泛型

    Java泛型 2019-07-05  22:00:24  by冲冲 1. 泛型的引例 1 List list = new ArrayList(); 2 list.add(1022); //向集合中添加 ...

  2. JavaSE笔记-泛型

    定义带泛型的类 public class Cat<T> { //可以用T定义实例变量 private T name; //可以用T定义形参 //构造器没有<> public C ...

  3. 17.泛型.md

    目录 1.Generic概念 2.泛型类 2.1定义泛型类 定义泛型: 注意要点 2.2泛型类的继承 2.3类型通配符 2.4设置类型形参上下限 上限 下限 2.5泛型接口 定义方法 注意要点 3.泛 ...

  4. JavaSE基础:泛型

    泛型 1.引入 情景模式描述,假设完成一个学生的成绩的情况: 整数: math=80,english=70 小数: math=85.6,englisth=77.8 字符串: math="66 ...

  5. JavaSE学习总结第16天_集合框架2

      16.01 ArrayList存储字符串并遍历 ArrayList类概述:底层数据结构是数组,查询快,增删慢,线程不安全,效率高 ArrayList类是List 接口的大小可变数组的实现.实现了所 ...

  6. Java 集合、Iterator迭代器、泛型等

    01集合使用的回顾 A:集合使用的回顾 a.ArrayList集合存储5个int类型元素 public static void main(String[] args) { ArrayList<I ...

  7. 18_集合框架_第18天_集合、Iterator迭代器、增强for循环 、泛型_讲义

    今日内容介绍 1.集合 2.Iterator迭代器 3.增强for循环 4.泛型 01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public stati ...

  8. Java 17 新功能介绍(LTS)

    点赞再看,动力无限.Hello world : ) 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. Jav ...

  9. scala面向对象.高阶函数,柯里化,Actor编程简介

    1.定义一个类 class Person{ //用val修饰的变量是只读属性,有getter但是没有setter val id ="111" //用var修饰的变量既有getter ...

  10. 18_java之集合Collection

    01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public static void main(String[] args) { ArrayList< ...

随机推荐

  1. 谁动了我的cpu——oprofile使用札记

    引言 cpu无端占用高?应用程序响应慢?苦于没有分析的工具? oprofile利用cpu硬件层面提供的性能计数器(performance counter),通过计数采样,帮助我们从进程.函数.代码层面 ...

  2. 洛谷P3778 [APIO2017]商旅——01分数规划

    题目:https://www.luogu.org/problemnew/show/P3778 转化有点技巧: 其实直接关注比率的上下两项,也就是盈利和时间: 通过暴枚和 floyd 可以处理出两两点间 ...

  3. bzoj3638

    费用流+线段树 看见这个题我们马上就能想到费用流,设立源汇,分别向每个点连接容量为1费用为0的边,然后相邻的点之间连边,费用为点权,跑费用流就行了,但是很明显这样会超时,那么我们要优化一下,我们观察费 ...

  4. 【141】Adobe Acrobat技巧

    目录: 去除PDF的水印 待定 待定 待定 待定 待定 待定 待定 1. 批量去除PDF文件的水印 用Adobe Acrobat打开PDF文件之后,右侧选择工具>页面>水印>删除,可 ...

  5. vs2010统计代码行数

    参考:http://www.cnblogs.com/zfanlong1314/archive/2013/03/08/2950100.html 正则表达式:^:b*[^:b#/]+.*$ 文件类型:*. ...

  6. UVa 1471 Defense Lines (二分+set优化)

    题意:给定一个序列,然后让你删除一段连续的序列,使得剩下的序列中连续递增子序列最长. 析:如果暴力枚举那么时间复杂度肯定受不了,我们可以先进行预处理,f[i] 表示以 i 结尾的连续最长序列,g[i] ...

  7. layui 添加第三方插件

    关于 layui 添加第三方 JS 库 在写公司项目时,需要将第三方 JS 库整合到 layui 中,具体操作如下: 示例:https://www.jianshu.com/p/7a182e8bff10 ...

  8. bzoj 2152: 聪聪可可【点分治】

    裸的点分治,运算在模3下进行然后统计答案的时候统计余1的*余2的*2+余0的^2 #include<iostream> #include<cstdio> using names ...

  9. bzoj 1923: [Sdoi2010]外星千足虫【高斯消元】

    裸的异或高斯消元 #include<iostream> #include<cstdio> using namespace std; const int N=2005; int ...

  10. 洛谷P2082 区间覆盖(加强版)(珂朵莉树)

    传送门 虽然是黄题而且还是一波离散就能解决的东西 然而珂朵莉树还是很好用 相当于一开始区间全为0,然后每一次区间赋值,问最后总权值 珂朵莉树搞一搞就好了 //minamoto #include< ...