Java泛型快速介紹 - Prakhar
假設編寫了以下類:
public class MessagePublisher extends AMQPublisher{ public String message; public MessageEncoder messageEncoder; public MessagePublisher(String message) { super(); //Assume AMQPublisher has a NoArgs constructor this.message = message; this.messageEncoder = new MessageEncoder(); } public void publishMessage() throws MessageEncodingException { final EncodedMessage encodedMessage = messageEncoder.encode(message); sendMessage(encodedMessage); } } |
現在,假設我們要為另一條訊息做同樣的事情,只是這次訊息不是字串型別,而是是整數、雙數或枚數?
我們是否需要再寫3到4個類,其中95%的程式碼都是一樣的?
不,只要你知道泛型。
以上述例子為例,我們將需要做一些修改:
public class MessagePublisher<T> extends AMQPublisher{ public T message; public MessageEncoder messageEncoder; public MessagePublisher(T message) { super(); //Assume AMQPublisher has a NoArgs constructor this.message = message; this.messageEncoder = new MessageEncoder(); } public void publishMessage() throws MessageEncodingException { final EncodedMessage encodedMessage = messageEncoder.encode(message); sendMessage(encodedMessage); } } |
你會注意到,我們已經把所有出現的String message替換成了T message,其中T是一個引數化的型別引用,與類名一起宣告。
注意:雖然我們把它看作是T,但你可以給它起任何名字 儘管社群中大多數人都使用T,所以保持這種方式是很好的,這樣如果有新的人進來檢視程式碼,他們就不會為一個不尋常的引數化型別符號而苦惱。
讓我們訪問同一個例子,看看如何使其發揮作用。
public class Main { static { final String stringMessage = "Message"; final Integer intMessage = 5; final Float floatMessage = 5.0; MessagePublisher<String> stringMessagePublisher = new MessagePublisher<>(stringMessage); MessagePublisher<Integer> intMessagePublisher = new MessagePublisher<>(intMessage); MessagePublisher<Float> floatMessagePublisher = new MessagePublisher<>(floatMessage); List<MessagePublisher> messagePublisherList = new ArrayList<>(); messagePublisherList.append(stringMessagePublisher); messagePublisherList.append(intMessagePublisher); messagePublisherList.append(floatMessagePublisher); } public static void main(String[] args) { // Publish all messages. messagePublisherList.stream().forEach(this::publishMessage); } } |
相關文章
- 【java】【泛型】泛型geneticJava泛型
- Java泛型Java泛型
- java.util.Arrays 快速使用介紹Java
- java浮點型別案例介紹Java型別
- Java 泛型原理Java泛型
- java泛型一二Java泛型
- Java(7)泛型Java泛型
- Java-泛型Java泛型
- Java+泛型Java泛型
- 簡單易懂的 Go 泛型使用和實現原理介紹Go泛型
- Java™ 教程(泛型原始型別)Java泛型型別
- 淺談java泛型Java泛型
- java 基礎 泛型Java泛型
- Java泛型複習Java泛型
- 認識Java泛型Java泛型
- Java泛型筆記Java泛型筆記
- JAVA泛型入門Java泛型
- Java 泛型詳解Java泛型
- Java中的泛型Java泛型
- Java基礎-泛型Java泛型
- Java:Collection集合、泛型Java泛型
- Java泛型知識Java泛型
- Java基礎 —— 泛型Java泛型
- Java函式泛型List引數,操作泛型元素Java函式泛型
- 【Java反射】Java 泛型基礎Java反射泛型
- Java泛型型別擦除問題Java泛型型別
- Go 語言之父介紹泛型:增添三個新的主要內容Go泛型
- 深入理解 Java 泛型Java泛型
- Java泛型及實踐Java泛型
- 我理解的 Java 泛型Java泛型
- Java™ 教程(泛型的限制)Java泛型
- 深入理解Java泛型Java泛型
- Java & Go 泛型對比JavaGo泛型
- Java高階特性—泛型Java泛型
- Android、Java泛型掃盲AndroidJava泛型
- Java泛型理解與使用Java泛型
- 再次認識java泛型Java泛型
- java 泛型程式設計Java泛型程式設計