Instantiating inner class
inner-classes, java
Solution
I think you want to declare the `HashPerson` class as `static`. Otherwise it can only be instantiated in the context of the containing class, either in a method of the containing class or using code like this:
ContainingClass container = new ContainingClass();
HashPerson william = container.new HashPerson("willy");
Actually, my rule-of-thumb is to make any nested class static, unless I have a special reason not to. This is also more efficient, because non-static nested classes (called inner classes) always contain an implicit reference to the containing object.
Problem
I working on a sample problem of over-ridding hashCode and equals method but getting an error: "No enclosing instance of type CustomHashCodeExample is accessible. Must qualify the allocation with an enclosing instance of type CustomHashCodeExample (e.g. x.new A() where x is an instance of CustomHashCodeExample)." I wrote an inner class HashPerson and I am getting this error when I am trying to instantiate this inner class in another method called testHashCodeOverride(). ``` public static void testHashCodeOverride(){ System.out.println("\nTest HashCode Override Method"); System.out.println("==================================\n"); HashPerson william = new HashPerson("willy"); HashPerson bill = new HashPerson("willy"); } ``` This code works fine, even though I dont see static inner class or instantiation of outer class, confused :( ``` public class HashCodeExample { public static void testHashCodeOverride() { HashPerson william = new HashPerson("Willy"); HashPerson bill = new HashPerson("Willy"); System.out.println("Hash code for william = " + william.hashCode()); System.out.println("Hash code for bill = " + bill.hashCode()); HashMap table = new HashMap(); table.put(william, "Silly"); if (table.containsKey(william)) { System.out.println(table.get(william)); } else { System.out.println("Key " + william + " not found"); } if (table.containsKey(bill)) { System.out.println(table.get(bill)); } else { System.out.println("Key " + bill + " not found"); } } class HashPerson { private static final int HASH_PRIME = 1000003; public HashPerson(String name) { this.name = name; } public String toString() { return name; } public boolean equals(Object rhs) { if (this == rhs) return true; // make sure they are the same class if (rhs == null || rhs.getClass() != getClass()) return false; // ok, they are the same class. Cast rhs to HashPerson HashPerson other = (HashPerson) rhs; // our test for equality simply checks the name field if (!name.equals(other.name)) { return false; } // if we get this far, they are equal return true; } public int hashCode() { int result = 0; result = HASH_PRIME * result + name.hashCode(); return result; } private String name; } } ```