Skip to main content

A Generic class – And why is it confusing

Go to start of metadata

Generics came into java from Java 5 and has changed the way we use Collections. You now find people using and building generic classes more and more. For those who don’t know what generics is, please read the below link:

My gripe with generics is not with generics itself, but the convention of using placeholders as single letters like this:
public class HashMap<K,V> implements Map<K,V>{}
With collections, since we have been using these classes before generics came in we know that K represents the key and V represents the value. Now imagine you have class such as below:
public abstract class SwingWorker<T, V> implements RunnableFuture<T> {}

Now without having a look at the gory innards of SwingWorker would you be able to reliably interpret what T and V actually mean? Once you go through the class you will understand that T actually represents the return type of the doInBackground() method and V represent the type of the class that you can use to show intermediate results on the screen.
This, people can argue can be obtained out of the java docs as well. Well now everyone knows that java docs go quickly out of date in any project and the only source of truth remains your code. People who read the java doc would go through the code anyway to understand how to use the class. And all of this just to understand what T and V represents. When we are all for descriptive method, field and class names why cryptic placeholder values?

The java tutorial on generics state that the convention is because if we use a descriptive placeholder name we might confuse them with class names. I find that a little hard to take in. What if you use the $.. like this:

public abstract class SwingWorker<$ReturnValue, $IntermediateResult> implements RunnableFuture<$ReturnValue> {}
public class HashMap<$Key,$Value> implements Map<$Key,$Value>{}

Now it becomes instantly clear to me how these generic types are used within that class and what I need to pass into the class declaration. No one names their classes starting with a $ sign. In fact in most templating languages, velocity, struts, spring using the dollar sign to signify a placeholder. Why can’t we do the same? I for one am going to start and will seek to turn other people as well to start using descriptive placeholders in generic classes.


Popular posts from this blog

Exploring Node.js Internals

I found a great article explaining Node JS internals, must read : Some other articles : Introduction to Node.js Being an official website, explains what Node.js is, as well as its package managers, and lists web frameworks built on top of it. “ JavaScript & Node.js ”,  The Node Beginner Book This book by  Manuel Kiessling  does a fantastic job of explaining Node.js, after warning that JavaScript in the browser is not the same as the one in Node.js, even though both are written in the same language. Beginning Node.js This beginner book goes beyond an explanation of the runtime. It teaches about packages and streams and creating a web server with the Express framework. LibUV This is the official documentation of the supporting C++ code of the Node.js runtime. V8 This is the official documentation of the JavaScript engine that makes it possible to write Node.js with JavaScript.

Tum mujhko karna maaf priye – Poem By Dr. Kumar Vishwas

Lyrics : O kalp-vraksh ki son-juhi, O amal-tas ki amar kali Dharti ke aatap se jalte, Man par chaayi nirmal badli Main tumko madhu-sad-gandh yukt, sansaar nahi de paunga ! Tum mujhko karna maaf priye main pyar nahi de paunga !! Tum kalp-vraksh ka fool aur Main dharti ka adna gayak Tum jeewan ke upbhog yogya Main nahi adhuri gazal shubhey Tum saam-gaan si pawan ho Himshikharon par sehsa kaundha Bijuri si tum man bhawan ho Isliye vyarth shabdo wala, vyapar nahi de paunga ! Tum mujhko karna maaf priye main pyar nahi de paunga !! Tum jis shaiya par shayan karo, Veh sheer sindh si pawan ho Jis aangan ki ho maul-shree Veh aangan kya vrandawan ho Jin adhron ka chumban pao Veh adhar nahin ganga tat ho Jiski chaya ban saath raho Veh vyakti nahin vanshi-vat ho Par main vat jaisa saghan chaaon ,vistaar nahin de paunga ! Tum mujhko karna maaf main pyar nahi de paunga !! Main tumko chand sitaron ka Saupun uphar bhala kaise Main yayavar banjara sadhu sur-sansar bhala kaise Main jeewan