2017-05-26 161 views
0

的克隆我有一個看起來像這樣的接口:創建界面

public interface IMetaFactory { 
    String imageId = new String(); 
    // some default methods 
    void setImageId(String id); 
    default String getImageId() { 
     return imageId; 
    } 
} 

我需要在此界面中添加克隆方法,當我打電話:

IMetaFactory mf = metafactory.clone(); 

它返回一個新副本IMetaFactory,以便我可以在其中設置新的imageID

mf.setImageId("abc"); 

我該如何實現它?界面內的克隆方法只是溢出堆棧(顯然)。

+2

爲什麼選擇Interface,爲什麼不用抽象方法clone()。 –

+0

爲什麼你需要克隆呢,而不是僅僅把'imageId'作爲一個成員變量,然後在你想要的時候創建一個新的實例呢? –

+4

附註:您是否知道在界面中定義的字段是「final」? – Pshemo

回答

-2

我想你可以使用抽象類是從抽象類每類繼承實現克隆方法並返回這個抽象的clone()方法:

public abstract class MetaFactory { 
    String imageId = new String(); 
    // some default methods 
    void setImageId(String id); 
    default String getImageId() { 
     return imageId; 
    } 

    public abstract MetaFactory clone(); 
} 

,並在任何繼承類的實現抽象類如下:

public class A extends MetaFactory { 
    //the lone method implementation 
    public MetaFactory clone(){ 
     return this; 
    } 
} 
+0

你是否檢查過你的代碼編譯? – alfasin