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泛型詳細介紹Java泛型
- 【java】【泛型】泛型geneticJava泛型
- java泛型之泛型方法。Java泛型
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- java泛型之泛型陣列。Java泛型陣列
- Java 泛型Java泛型
- Java泛型Java泛型
- java.util.Arrays 快速使用介紹Java
- Java 泛型原理Java泛型
- Java+泛型Java泛型
- java泛型一二Java泛型
- Java(7)泛型Java泛型
- Java-泛型Java泛型
- java泛型剖析Java泛型
- JAVA泛型類Java泛型
- java浮點型別案例介紹Java型別
- 簡單易懂的 Go 泛型使用和實現原理介紹Go泛型
- Java™ 教程(泛型原始型別)Java泛型型別
- Java泛型與型別擦除Java泛型型別
- 淺談java泛型Java泛型
- java 基礎 泛型Java泛型
- Java:Collection集合、泛型Java泛型
- Java泛型知識Java泛型
- Java泛型複習Java泛型
- 認識Java泛型Java泛型
- Java 泛型詳解Java泛型
- Java泛型筆記Java泛型筆記
- Java基礎-泛型Java泛型
- JAVA泛型入門Java泛型
- Effective Java(四) 泛型Java泛型
- Java泛型詳解Java泛型
- Java集合和泛型Java泛型
- 【Java基礎】泛型Java泛型
- Java 泛型 1例Java泛型
- java 泛型陣列Java泛型陣列
- JAVA泛型淺析Java泛型
- Java函式泛型List引數,操作泛型元素Java函式泛型
- JAVA泛型使用練習2(自定義泛型使用)Java泛型