假设我有一个方法需要很长时间才能创建一个对象,
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 中这样的事情可能吗?