Return to Java terms or Java best practices
Use Java interface references to Java Collections - http://www.javapractices.com/topic/TopicAction.do?Id=26
In general, references to Java objects should be as generic as possible. The user of such a reference will be protected from possible changes to the underlying implementation Java class | class. The ripple effects of such a change are limited to the single line of code which creates the object, and will not propagate any further.
In the case of Java collections | collections, this means habitually referring to collection objects using Java List | List, Java Map | Map, Java Set | Set, Java Queue | Queue, and Java Deque | Deque interface references.
Note as well that all of these except Map can be referred to using the even more generic Java Collection | Collection.
Example
import java.util.*;
public class Nucleus {
public static void main (String... args) { Nucleus lithium = new Nucleus (3,4); //note the generic Map reference is used here, not LinkedHashMap Mapquarks = lithium.getQuarkSummary(); log("Number of up quarks in lithium nucleus: " + quarks.get("Up")); log("Number of down quarks in lithium nucleus: " + quarks.get("Down")); }
public Nucleus(int numProtons, int numNeutrons) { this.numProtons = numProtons; this.numNeutrons = numNeutrons; }
/** Note this get method is final. */ public final int getNumProtons() { return numProtons; }
/** Note this get method is final. */ public final int getNumNeutrons() { return numNeutrons; }
/** * This method returns a Map which summarizes how many quarks of each * flavour are in the nucleus. * * @return a generic Map reference, instead of a LinkedHashMap; the * user will be protected from the detail of what implementation of Map * has been selected here. */ public final MapgetQuarkSummary() { LinkedHashMap result = new LinkedHashMap<>(); int numUp = numProtons * UP_QUARKS_PER_PROTON + numNeutrons * UP_QUARKS_PER_NEUTRON ; int numDown = numProtons * DOWN_QUARKS_PER_PROTON + numNeutrons * DOWN_QUARKS_PER_NEUTRON ; //this makes use of auto-boxing of ints into Integers: result.put("Up", numUp); result.put("Down", numDown); return result; }
//PRIVATE private final int numProtons; private final int numNeutrons;
private static final int UP_QUARKS_PER_PROTON = 2; private static final int DOWN_QUARKS_PER_PROTON = 1;
private static final int UP_QUARKS_PER_NEUTRON = 1; private static final int DOWN_QUARKS_PER_NEUTRON = 2;
private static void log(String aMessage){ System.out.println(aMessage);