zoukankan      html  css  js  c++  java
  • Node<T> 的作用

    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的父类型。

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

  • 相关阅读:
    Cookie存储在哪里
    save the transient instance before flushing错误解决办法
    hibernate中简单的增删改查
    hibernate中get和load的区别
    使用Linux命令修改数据库密码
    配置solrcloud
    如何确定Redis集群中各个节点的主从关系
    解决Eclipse Debug 断点调试的source not found问题
    .NET框架
    ORM框架
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/noteT.html
Copyright © 2011-2022 走看看