<Ulf.Zibis@gmx.de> wrote:
">

(original) (raw)

Ulf-

Very good.� How what happens if you change the return type, or add a throws clause, or change its access modifier (JLS 8.4.8.3)?� In all three cases it must be a compile-time error.

-Neal

On Tue, Oct 27, 2009 at 8:13 AM, Ulf Zibis <Ulf.Zibis@gmx.de> wrote:

It works fine too.

Is coded:





public class MyClass1 {

� private final int value;



� public MyClass1(int value) {

� � � this.value = value;

� }



� public static int hashCode(Object key) {

� � � return 3;

� }



// � �public static int hashCode(MyClass1 obj) {


// � � � �return 3 * obj.value;

// � �}



� public static void main(String... args) {

� � � MyClass1 c = new MyClass1(99);

� � � System.out.println(c.hashCode());

� � � System.out.println(hashCode(c));

� � � System.out.println(Object.hashCode(c)); // compile error if using official version of class Object

� }

}





-Ulf





Am 27.10.2009 15:53, Neal Gafter schrieb:

Try adding

�public static hashCode(Object key) {
� � �return 3;
�}

to MyClass. �Such a class is broken by the proposed change.

On Tue, Oct 27, 2009 at 2:49 AM, Ulf Zibis <Ulf.Zibis@gmx.de Ulf.Zibis@gmx.de>> wrote:

� �Correction:


� �public class MyClass1 {
� � private final int value;

� � public MyClass1(int value) {
� � � � this.value = value;
� � }

� � public static int hashCode(MyClass1 obj) {
� � � � return 3 \* obj.value;
� � }

� � public static void main(String... args) {
� � � � MyClass1 c = new MyClass1(99);
� � � � System.out.println(c.hashCode());
� � � � System.out.println(hashCode(c));
� � � � System.out.println(Object.hashCode(c)); // compile error if
� �using official version of class Object
� � }
� �}


� �-Ulf