-1

オブジェクトの作成に非常に長い時間がかかるメソッドがあるとします。

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でこのようなことは可能ですか?

4

1 に答える 1