Node 的作用


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

 

原創文章,歡迎轉載,轉載請注明出處!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM