我是 Apache Kafka 和 Spring Boot 的新手。我看到幾乎類具有相同的結構,例如ProducerFactory<K,?V>,,KafkaTemplate<K, V>...我嘗試閱讀檔案,但沒有解釋,它只是說k - key和v - value。有人告訴我這個 Generic 的意義嗎?
uj5u.com熱心網友回復:
我也不是一個偉大的專家,但作為泛型,它們采用你決定給它們的型別,就像這樣,它們只是充當占位符。
這樣寫他們讓我想起了地圖,事實上我在網上找到了這個例子:
public ProducerFactory<String, String> producerFactory() {
// set the producer properties
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers);
properties.put(ProducerConfig.RETRIES_CONFIG, 0);
properties.put(ProducerConfig.BATCH_SIZE_CONFIG, 4096);
properties.put(ProducerConfig.LINGER_MS_CONFIG, 1);
properties.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 40960);
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return new DefaultKafkaProducerFactory<String, String>(properties);
}
學分
uj5u.com熱心網友回復:
您將需要了解泛型。
簡單來說,通過定義KafkaTemplate<K,V>它們允許您以您喜歡的任何方式呼叫它:
例子:
private final KafkaTemplate<String, String> kafkaTemplate;
private final KafkaTemplate<Long, String> kafkaTemplate;
private final KafkaTemplate<String, Order> kafkaTemplate;
如您所見,K(鍵)可以是任何東西,而 V(值)可以是任何東西。
uj5u.com熱心網友回復:
看書或者官方檔案對理解java中的泛型更有幫助。
從泛型類的例子開始,盡量讓大家理解,它是一個有Attributes變數型別的類,具體的型別會在你真正使用類比如創建實體的時候給出。
class Person<T> {
private T t ;
public Person (T t){
this.t=t;
}
}
當您使用 Person 類時,您知道任何 Person 型別的實體(物件)都有一個實體變數,但尚未給出該屬性的確切型別,您應該在使用該類時給出它,例如當您想創建你應該這樣寫一個實體:
new Person<Dog>(new Dog()); // like that your new Person have a Dog
創建另一個擁有貓的人將是這樣的:
new Person<Cat>(new Cat()); // the other Person have a Cat
這只是一個簡單的解釋,但主題確實需要從書中閱讀。
uj5u.com熱心網友回復:
看看泛型教程:
型別引數命名約定
按照慣例,型別引數名稱是單個大寫字母。這與您已經知道的變數命名約定形成鮮明對比,并且有充分的理由:沒有這種約定,就很難區分型別變數和普通類或介面名稱之間的區別。
最常用的型別引數名稱是:
E- 元素(Java Collections Framework 廣泛使用)K- 鑰匙N- 數字T- 型別V- 價值S,U,V等等 - 第 2、第 3、第 4 種型別 您將在整個 Java SE API 和本課的其余部分中看到這些名稱。
但是不僅在Java教程中,我們可以通過所有“常規Java開發”找到這些約定。
更遠:
呼叫和實體化泛型型別
要在代碼中參考泛型 Box 類,您必須執行泛型型別呼叫,它會替換
T為一些具體值,例如 Integer:
Box<Integer> integerBox;
您可以將泛型型別呼叫視為類似于普通方法呼叫,但不是將引數傳遞給方法,而是將型別引數(
Integer在這種情況下)傳遞給Box類本身。
型別引數和型別引數術語:許多開發人員交替使用術語“型別引數”和“型別引數”,但這些術語并不相同。編碼時,提供型別引數以創建引數化型別。因此,
TinFoo<T>是一個型別引數,而 String inFoo<String> f是一個型別引數。本課在使用這些術語時遵守此定義。
與任何其他變數宣告一樣,此代碼實際上并不創建新的 Box 物件。它只是宣告 integerBox 將持有對“整數框”的參考,這是如何
Box<Integer>讀取的。
泛型型別的呼叫通常稱為引數化型別。
要實體化這個類,像往常一樣使用 new 關鍵字,但放在
<Integer>類名和括號之間:
Box<Integer> integerBox = new Box<Integer>();...
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/412133.html
標籤:
