Hi all, There is an interesting edge case in HashMap. If we use a proxy object as the key to put something into HashMap, we will fail to retrieve the value by using that key. But RI works well for this case. Here is a test case below to present the problem. I found the root cause of the failure for our HashMap is that proxyInstance.equals(proxyInstance) returns false which sounds strange but appears work correctly as both Harmony and RI behave so. I suspect RI has made some special approaches to match the key when the key is a proxy object. So I would be inclined to follow RI's behavior in this case. Any thoughts here?
I have raised a JIRA at https://issues.apache.org/jira/browse/HARMONY-6237for this issue. public interface MockInterface { public String mockMethod(); } public class MockClass implements MockInterface { public String mockMethod() { return "This is a mock class."; } } import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.HashMap; import java.util.Map; public class TestProxy implements InvocationHandler { Object obj; public TestProxy(Object o) { obj = o; } public Object invoke(Object proxy, Method m, Object[] args) throws Throwable { Object result = null; try { result = m.invoke(obj, args); } catch (Exception e) { e.printStackTrace(); } finally { } return result; } public static void main(String[] argv) throws Exception { MockInterface proxyInstance = (MockInterface) Proxy.newProxyInstance( MockInterface.class.getClassLoader(), new Class[] { MockInterface.class }, new TestProxy( new MockClass())); Map hm = new HashMap(); hm.put(proxyInstance, "Value"); Object o = hm.get(proxyInstance); System.out.println("Value got for proxy object key:" + o); System.out.println(proxyInstance.equals(proxyInstance)); } } Output Harmony: Value got for proxy object key:null false RI: Value got for proxy object key:Value false -- Best Regards, Jim, Jun Jie Yu