gpt4 book ai didi

java - 为什么方法调用 return null for method put from proxied Map

转载 作者:行者123 更新时间:2023-11-29 04:09:06 26 4
gpt4 key购买 nike

方法调用方法invoke时出现问题- 'V put(K key, V val)' 从代理 Map 返回 null。但是对于方法 - V get(K key) 就可以了。

查看代码示例

package com.dynamic.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class LogHandler implements InvocationHandler {

private final Object target;

public LogHandler(Object target) {
this.target = target;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Start");
Object o = method.invoke(target, args);
System.out.println("Finish");
return o;

}
}

-----
package com.dynamic.proxy;

import java.lang.reflect.Proxy;
import java.util.HashMap;
import java.util.Map;

public class Main {

public static void main(String[] args) {

LogHandler logHandler = new LogHandler(new HashMap<>());
Map<Integer, String> map =
(Map) Proxy.newProxyInstance(logHandler.getClass().getClassLoader(),
new Class[]{Map.class},
logHandler);

System.out.println(map.put(0, "value-0")); //null
System.out.println(map.get(0)); // value-0
}
}


最佳答案

引用the documentaion , Map#put 返回“与键关联的前一个值,如果键没有映射则返回 null”。由于这是第一次向 map 引入键0,所以put(0, "value-0")的返回值确实是null。如果 map 未被代理,您将获得相同的结果。

关于java - 为什么方法调用 return null for method put from proxied Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56191915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com