オブジェクトの作成に非常に長い時間がかかるメソッドがあるとします。
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でこのようなことは可能ですか?