Search code examples
javaperformanceparametersparameter-passing

Best practice for passing many arguments to method?


Occasionally , we have to write methods that receive many many arguments , for example :

public void doSomething(Object objA , Object objectB ,Date date1 ,Date date2 ,String str1 ,String str2 )
{
}

When I encounter this kind of problem , I often encapsulate arguments into a map.

Map<Object,Object> params = new HashMap<Object,Object>();
params.put("objA",ObjA) ;

......

public void doSomething(Map<Object,Object> params)
{
 // extracting params 
 Object objA = (Object)params.get("objA");
 ......
 }

This is not a good practice , encapsulate params into a map is totally a waste of efficiency. The good thing is , the clean signature , easy to add other params with fewest modification . what's the best practice for this kind of problem ?


Solution

  • In Effective Java, Chapter 7 (Methods), Item 40 (Design method signatures carefully), Bloch writes:

    There are three techniques for shortening overly long parameter lists:

    • break the method into multiple methods, each which require only a subset of the parameters
    • create helper classes to hold group of parameters (typically static member classes)
    • adapt the Builder pattern from object construction to method invocation.

    For more details, I encourage you to buy the book, it's really worth it.