HashMap 的代理 NullPointerException
Proxy NullPointerException for HashMap
我正在尝试在我的 WebApp 和我的磁盘存储之间建立一个代理。我知道 WebApp 一切正常,它甚至可以将内容保存到磁盘,所以我知道我的 InvocationHandler 上的 Invoke 方法被调用,但代理本身似乎为 Null,因此 WebApp 上的任何内容都没有更新。
创建代理:
public class Storage {
public static final Storage INSTANCE = new Storage();
private Storage() {
}
//private final Map<String, Note> tmpStorage = new HashMap<>();
public Map<String, Note> getStorageForUser(Credentials credentials) {
String location = "./storage/"+credentials.getUsername();
return (Map<String, Note>) Proxy.newProxyInstance(
Map.class.getClassLoader(),
new Class<?>[]{Map.class},
new FileStorageMap(location, new HashMap<>()));
//return tmpStorage;
}
}
调用处理程序:
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName() == "post" || method.getName() == "put"){
FileUtils.writeStringToFile(new File(folder.getPath()+"/"+args[0]), (new NoteToJson((Note)args[1])).getJson().toString(), "UTF-8");
}
else{
new File(folder.getPath()+"/"+args[0]).delete();
}
return method.invoke(proxiedMap, args);
}
我已经检查并创建了名为 "FileStorageMap" 的 InvocationHandler,文件夹和 proxiedMap 是数据字段,它们都不是 Null,它们都已正确填写。但是对于代理本身,它 returns 空指针异常。谁能告诉我这是为什么?
错误在于方法名称错误,并且更多的东西进入了 else 语句,这超出了我的预期。代理本身并不是真正的问题。
我正在尝试在我的 WebApp 和我的磁盘存储之间建立一个代理。我知道 WebApp 一切正常,它甚至可以将内容保存到磁盘,所以我知道我的 InvocationHandler 上的 Invoke 方法被调用,但代理本身似乎为 Null,因此 WebApp 上的任何内容都没有更新。
创建代理:
public class Storage {
public static final Storage INSTANCE = new Storage();
private Storage() {
}
//private final Map<String, Note> tmpStorage = new HashMap<>();
public Map<String, Note> getStorageForUser(Credentials credentials) {
String location = "./storage/"+credentials.getUsername();
return (Map<String, Note>) Proxy.newProxyInstance(
Map.class.getClassLoader(),
new Class<?>[]{Map.class},
new FileStorageMap(location, new HashMap<>()));
//return tmpStorage;
}
}
调用处理程序:
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName() == "post" || method.getName() == "put"){
FileUtils.writeStringToFile(new File(folder.getPath()+"/"+args[0]), (new NoteToJson((Note)args[1])).getJson().toString(), "UTF-8");
}
else{
new File(folder.getPath()+"/"+args[0]).delete();
}
return method.invoke(proxiedMap, args);
}
我已经检查并创建了名为 "FileStorageMap" 的 InvocationHandler,文件夹和 proxiedMap 是数据字段,它们都不是 Null,它们都已正确填写。但是对于代理本身,它 returns 空指针异常。谁能告诉我这是为什么?
错误在于方法名称错误,并且更多的东西进入了 else 语句,这超出了我的预期。代理本身并不是真正的问题。