Github user hmcl commented on a diff in the pull request:

    https://github.com/apache/storm/pull/2428#discussion_r155909342
  
    --- Diff: 
external/storm-kafka-client/src/main/java/org/apache/storm/kafka/spout/KafkaSpoutConfig.java
 ---
    @@ -359,7 +356,7 @@ private Builder(Builder<?, ?> builder, 
SerializableDeserializer<K> keyDes, Class
              */
             @Deprecated
             public <NK> Builder<NK, V> setKey(Class<? extends 
Deserializer<NK>> clazz) {
    --- End diff --
    
    @srdo do you know why this method returns a new builder object? I can't 
figure a reason for it to so. I suspect that the only reason for that to happen 
is because the fields of the builder class are final (e.g keyDesClassClazz), 
and to make the generics work. There is no benefit in having fields inside the 
builder class to be final. The code snippet bellow also fixes the generics 
problem. Any reason not to get rid of the builder (with copy constructor) class 
completely and make this method like this:
    
    ```java
    public Builder<K,V> setKey(Class<? extends Deserializer<K>> clazz) {
                this.keyDesClazz = clazz;
                if (keyDesClazz != null) {
                    
this.kafkaProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, keyDesClazz);
                }
                return this;
            }
    ```
    
    We should do something similar to the other 3 methods. In my opinion has 
become a bit confusing, and I believe this is one of the last few opportunities 
we have to make it better. Please let me know your thoughts. Thanks.


---

Reply via email to