0

だから私はそのようなプロトタイプを持っているとしましょう:

private static Hashtable<String, Furniture> map  = 
                        new Hashtable<String, Furniture>();

public My_product() {
    loadCache();
}

public My_Product createProduct(String type, String name) {
    Furniture cachedproduct = map.get(type);
    return  (Furniture) cachedproduct.clone();
}

private static void loadCache() {
    Sub_product1 pr1 = new Sub_product1(null);
    map.put("pr1", pr1);
    Sub_product2 pr2 = new Sub_product2(null);
    map.put("pr2", pr2);
}   

そのため、オブジェクトのインスタンスを作成するとき、それを複製した後に入力される値がわかりません(複製を使用してオブジェクトを作成します)。そこで、オブジェクト インスタンスに null 値を選択しました。しかし、それを複製すると、そのオブジェクトにどの値を割り当てる必要があるかがわかります。nullでは、オブジェクトインスタンスからの値ではなく、クローン作成中に値を指定するにはどうすればよいでしょうか?

メソッド method でわかるようにcreateProduct、 という引数がありますname。その名前を複製されたオブジェクトで使用したいのですが、どうすればそれができますか?

4

2 に答える 2

0

Java 組み込みクローン メカニズムを介して引数を渡すことはできません。クラスのセッターを提供して、Furnitureクローンが作成された後に名前を変更できます。

Java でのクローン作成は、一般的に壊れていると見なされることに注意してください。これは、オブジェクトを作成する脆弱な方法です。一般に、次のようなファクトリパターンを使用する方が適切です。

interface FurnitureBuilder {
   Furniture build(String name);
}

class SubProduct1Builder implements FurnitureBuilder {
   public Furniture build(String name) { return new SubProduct1(name); }
}

class MyFurnitureFactory {
    private final Map<String, FurnitureBuilder> builderByType = ... 
    // initialization omitted

    public Furniture create(String type, String name) {
       return builderByType.get(type).build(name); // null check omitted!
    }
}
于 2013-10-10T15:13:23.860 に答える