我正在瀏覽 Streams 檔案并觀察到 ??Stream 是一個型別化的介面,它擴展了 Base Stream 的型別為 T 并再次Stream <T>
public interface Stream<T> extends BaseStream<T,Stream<T>> {
}
介面流如何擴展具有型別邊界的基本流介面,就像流介面一樣Stream <T>?
uj5u.com熱心網友回復:
為什么不能呢?
這是在許多地方使用的技巧,例如列舉,其定義為:
public abstract class Enum<E extends Enum<E>>
總體思路是建立一個代表你自己型別的型別引數。
這就是為什么那個引數的字母是 S。它代表“Self”。
因此,如果我們看DoubleStream,它被定義為:
public interface DoubleStream extends BaseStream<Double, DoubleStream> {}
這樣做的目的是為了“自我回傳”方法,或者至少對于需要回傳相同型別的方法。流概念中有很多這樣的概念,例如peek、 或limit、 或onClose。
你可以..不要那樣做,并定義如下:
public interface BaseStream<T> {
BaseStream parallel();
}
但問題是,這會降級型別。如果我有一個IntStream并且我呼叫.parallel()它,編譯器認為它的型別是BaseStream. 這通常是不相關的(因為它IntStream可以收緊回傳型別,這根據 Java 語言規范是有效的),但有時它是相關的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/465686.html
上一篇:泛型集插入函式int
