Java中常见到以下定义的类

public class Node<T> {
  T data;
  public Node<T> next;
  Node(T data) {
    this.data = data;
    this.next = null;
  }
}

这里的Node<T>是什么意思?

解释

T是自定义泛型,泛型的主要目的是实现 java的类型安全,消除了强制类型转换

使用上面的类定义如下

  Node tmp1 = new Node(data);
  Node<Integer> tmp2 = new Node<Integer>(data);

前者会有编译的警告,即便它能够执行;但是后者是没有警告的,同时限定了data 是Integer类型的

这种定义方式的类,比如List,
  public interface List<E> extends Collection<E>

现在版本的jdk可以少写一个类型
  List<String> dtr = new ArrayList<>();

PS:还有个好处,就是如果想要定义class Node<String>  和 class Node<Integer> 两个类,那么使用泛型的话,只要定义一个类Node<T> 就好了

<T> T和T的区别?

以下参考:https://segmentfault.com/q/1010000009171736

问题

为什么会报错?first不就是T类型吗?还有<T> T和T有什么区别?

回答
如果你希望 getMax 方法的返回值类型为 T,就要这样去定义getMax方法:
  public T getMax()

如果你希望 getMax 方法返回值的类型由调用者决定,那么就这么去定义 getMax 方法:
  public <A> A getMax() {
    //...
    return (A)result;
  }
这里的 A ,一定不能与类名声明的 T 是同个字母。
简而言之,你说的 T 和 <T> T 根本是两种不同的用途。

?通配符泛型

以下参考:https://www.cnblogs.com/Vcanccc/p/5701351.html

?和T都表示不确定的类型,但如果是T的话,函数里面可以对T进行操作

泛型三种:
  [1]ArrayList<T> al=new ArrayList<T>();指定集合元素只能是T类型
  [2]ArrayList<?> al=new ArrayList<?>();集合元素可以是任意类型,这种没有意义,一般是方法中,只是为了说明用法
  [3]ArrayList<? extends E> al=new ArrayList<? extends E>();
  泛型的限定:
    ? extends E:接收E类型或者E的子类型。
    ?super E:接收E类型或者E的父类型。

原创文章,欢迎转载,转载请注明出处!

Node<T> 的作用的更多相关文章

  1. node.js的作用、回调、同步异步代码、事件循环

    http://www.nodeclass.com/articles/39274 一.node.js的作用 I/O的意义,(I/O是输入/输出的简写,如:键盘敲入文本,输入,屏幕上看到文本显示输出.鼠标 ...

  2. Node.js NPM 作用

    章节 Node.js NPM 介绍 Node.js NPM 作用 Node.js NPM 包(Package) Node.js NPM 管理包 Node.js NPM Package.json NPM ...

  3. 为什么要使用 Node.js

    这是一个移动端工程师涉足前端和后端开发的学习笔记,如有错误或理解不到位的地方,万望指正. Node.js 是什么 传统意义上的 JavaScript 运行在浏览器上,这是因为浏览器内核实际上分为两个部 ...

  4. 为什么要用 Node.js

    每日一篇优秀博文 2017年10月10日 周二 为什么要用 Node.js 这是一个移动端工程师涉足前端和后端开发的学习笔记,如有错误或理解不到位的地方,万望指正. Node.js 是什么 传统意义上 ...

  5. node.js基本工作原理及流程

    概述 Node.js是什么 Node 是一个服务器端 JavaScript 解释器,用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非 ...

  6. Node.js的概念与应用

    转:http://blog.jobbole.com/100058/?utm_source=blog.jobbole.com&utm_medium=relatedPosts Node.js 是什 ...

  7. 学习笔记——node.js

    node.js的作用在于,号称可以让服务器支持更多的连接.比如说,php + apche可以让服务器支持4000个并发连接,那么node.js + apche可以让服务器支持并发几万个. 为什么这么牛 ...

  8. DOM基础知识(Node对象、Element对象)

    5.Node对象 u  遍历节点 u 父节点 .parentNode - 获取父节点—> 元素节点或文档节点 .parentElement - 获取父元素节点—> 元素节点 u    子节 ...

  9. node中间层

    node中间层 一.总结 1.node中间层作用:前端也是mvc,NodeJS之后,前端可以更加专注于视图层,而让更多的数据逻辑放在Node层处理 2.node中间层作用:当发现所有请求量太多应付不过 ...

随机推荐

  1. H3C交换机-SNMP配置

    1.1     SNMP基础配置 1.启动/关闭SNMP Agent服务 在系统视图模式下: 启用:snmp-agent 关闭:undo snmp-agent 注:缺省情况下snmp agent是关闭 ...

  2. Nginx监控运维

    Nginx是一个开源.免费.高性能的HTTP和反向代理服务器,也可以用于IMAP/POP3代理服务器.充分利用Nginx的特性,可以有效解决流量高并发请求.cc攻击等问题. 本文探讨了电商场景下Ngi ...

  3. 05Hadoop 概论

    Hadoop的思想之源:Google Google搜索引擎,Gmail,安卓,AppspotGoogle Maps,Google earth,Google 学术,Google翻译,Google+,下一 ...

  4. MySQL 通过多个示例学习索引

    最近在准备面试,关于索引这一块,发现很多以前忽略的点,这里好好整理一下 首先为什么要建立索引 一本书,有章.节.段.行这种单位. 如果现在需要找一个内容:第9章>第2节>第3段>第4 ...

  5. JavaScript生成二维码图片

    1.引入一个二维码工具的js文件,同时需要引入jquery文件 下面是jquery.qrcode.min.js文件内容: (function(r){r.fn.qrcode=function(h){va ...

  6. Laravel中resource方法

    新增的 resource 方法将遵从 RESTful 架构为用户资源生成路由.该方法接收两个参数,第一个参数为资源名称,第二个参数为控制器名称. Route::resource('users', 'U ...

  7. linux重装后配一些库

    #先要设置软件源 sudo apt-get update sudo apt-get upgrade #播放器 sudo apt-get install smplayer qt sudo apt-get ...

  8. Oracle 修改数据库表数据提交之后进行回滚

    --查看历史数据 select * from test1 as of timestamp to_timestamp('2018-12-23 14:41:00', 'yyyy-mm-dd hh24:mi ...

  9. Socket和ObjectOutputStream问题

    用到Socket序列化对象网络传输时ObjectOutputStream一直刷新连接 用户代码 package com.jachs.ladflower.ladflower; import java.n ...

  10. python爬虫scrapy之scrapy终端(Scrapy shell)

    Scrapy终端是一个交互终端,供您在未启动spider的情况下尝试及调试您的爬取代码. 其本意是用来测试提取数据的代码,不过您可以将其作为正常的Python终端,在上面测试任何的Python代码. ...