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. Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

    刚才有幸看了下 nvarchar(n)和varchar(n),感觉以前的认知有误. nvarchar(n):n指的是字符个数,范围是1-4000,存储的是可变长度的Unicode字符数据. 按字符存储 ...

  2. iptables的增删改查

    iptables是linux系统自带的防火墙,功能强大,学习起来需要一段时间,下面是一些习iptables的时候的记录.如果iptables不熟悉的话可以用apf,是一款基于iptables的防火墙, ...

  3. Springboot+Redis 配置和使用

    pom.xml 引入redis 开启缓存 <!-- cache --> <dependency> <groupId>org.springframework.boot ...

  4. stark组件之delete按钮、filter过滤

    1.构建批量删除按钮 2.filter过滤 3.总结+coding代码 1.构建批量删除按钮 1.admin中每个页面默认都有 2.stark之构建批量删除 3.coding {% extends ' ...

  5. shell脚本--初识CGI

    CGI按照百度百科的定义,如下: CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能.CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数 ...

  6. array_filter与array_map

    php数组array_filter函数和array_slice函数:<?php /* array_filter()用回调函数过滤数组中的单元 array_filter(array,functio ...

  7. Composer对于第三方包的自动加载

    Composer提供了四种方式的支持,分别是 PSR-0和PSR-4的自动加载(我的一篇文章也有介绍过它们),生成class-map,和直接包含files的方式. PSR-4是composer推荐使用 ...

  8. Chrome 使用绿色版实现同一个机器 打开多个不同的chrome版本

    1. 之前找了一个方案能够实现 多个chrome版本的 同时安装 但是发现不是很好. 2. 最近的一个办法 就是使用chrome的绿色版来实现 3. 下载地址: https://www.chrome6 ...

  9. 逻辑斯特回归tensorflow实现

    calss #!/usr/bin/python2.7 #coding:utf-8 from __future__ import print_function import tensorflow as ...

  10. jq简单仿上传文件

    html: <div> <input id="lefile" type="file" style="display:none&quo ...