【发布时间】:2013-06-27 14:13:24
【问题描述】:
假设我有一个方法需要很长时间才能创建一个对象,
public class Foo implements Serializable {
public static Foo create(...){
/* (takes a long time) */
}
}
我还有一个可以序列化和反序列化对象的辅助类,
public class Pickle {
public static void dump(Serializable obj, String filename) {
/* ... */
}
public static Object load(String filename) {
/* ... */
}
}
我想要一个函数,它首先尝试加载filename 指定的序列化对象,但如果失败,创建 对象default。它可能看起来像这样:
public Object conditionalCreate(String filename, Object default)
{
Object obj = null;
try{
obj = Pickle.load(filename);
}
catch(Exception e){
obj = default;
}
return obj;
}
conditionalCreate 函数现在的编写方式,default 将始终被创建 -- 我只想在必要时创建 default 对象。
在另一种语言中,conditionalCreate 函数可能如下所示:
public Object conditionalCreate(String filename, Function defaultConstructor){
Object obj = null;
try{
obj = Pickle.load(filename);
}
catch(Exception e){
obj = defaultConstructor(); /* Note the difference here */
}
return obj;
}
此外,如果需要构造对象(如果反序列化失败),我想要一种将参数传递给此默认构造函数的方法。
在 Java 7 中这样的事情可能吗?
【问题讨论】:
-
是的,您的具体问题是什么?
-
我想我很清楚我的问题是什么。我正在寻找一种方法来做某事。问题中解释了这一点。我误解了你的评论吗?
-
使java.lang.reflect.Constructor成为方法
conditionalCreate中第二个参数的类型。或者MethodHandle 是否合适?或者甚至是dynamic proxy
标签: java lazy-initialization first-class-functions