Saturday, July 6, 2013

toString() implementation

Sample toString() implementation here :
package view;

import java.util.HashMap;
import java.util.Map;

public class PhoneNumber {
    private final short areaCode;
    private final short prefix;
    private final short lineNumber;

    public PhoneNumber(int areaCode, int prefix, int lineNumber) {
        this.areaCode = (short)areaCode;
        this.prefix = (short)prefix;
        this.lineNumber = (short)lineNumber;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == this)
            return true;
        if (!(obj instanceof PhoneNumber)) {
            return false;
        }
        PhoneNumber pn = (PhoneNumber)obj;
        return pn.lineNumber == lineNumber && pn.prefix == prefix &&
            pn.areaCode == areaCode;
    }

    @Override
    public int hashCode() {
        int result = 17;
        result = 31 * result + areaCode;
        result = 31 * result + prefix;
        result = 31 * result + lineNumber;
        return result;
    }

    @Override
    public String toString() {
        return String.format("(%03d) %03d-%04d", areaCode, prefix, lineNumber);
    }

    public static void main(String[] arg) {
        System.out.println(new PhoneNumber(77, 44, 55));

    }

}

Equals & Hashcode implementation


A sample equals method implementation :
package view;

import java.util.HashMap;
import java.util.Map;

public class PhoneNumber {
    private final short areaCode;
    private final short prefix;
    private final short lineNumber;

    public PhoneNumber(int areaCode, int prefix, int lineNumber) {
        this.areaCode = (short)areaCode;
        this.prefix = (short)prefix;
        this.lineNumber = (short)lineNumber;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == this)
            return true;
        if (!(obj instanceof PhoneNumber)) {
            return false;
        }
        PhoneNumber pn = (PhoneNumber)obj;
        return pn.lineNumber == lineNumber && pn.prefix == prefix &&
            pn.areaCode == areaCode;
    }
    public static void main(String arg[]) {
        Map<PhoneNumber,String> m = new HashMap<PhoneNumber,String>();
            m.put(new PhoneNumber(77,44,55), "John");
            System.out.println(m.get(new PhoneNumber(77,44,55)));
       
    }
}

The console output will be null as the class is not overridden the hashcode.
    @Override
    public int hashCode() {
        int result = 17;
        result = 31 * result + areaCode;
        result = 31 * result + prefix;
        result = 31 * result + lineNumber;
        return result;
    }

This will return the correct result.