2017-05-26 3 views
0

Ich habe eine Schnittstelle, die wie folgt aussieht:Erstellen Sie einen Klon von Interface-

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

Ich brauche eine Klon-Methode in dieser Schnittstelle hinzuzufügen, so dass, wenn ich rufe:

IMetaFactory mf = metafactory.clone(); 

Es gibt eine neue Kopie von IMetaFactory, damit ich eine neue imageID darin setzen kann.

mf.setImageId("abc"); 

Wie erreiche ich es? Clone-Methode innerhalb der Schnittstelle überläuft einfach den Stapel (offensichtlich).

+2

Warum wählen Sie Schnittstelle, warum abstrakte Klasse mit abstrakten Methode clone(). –

+0

Warum brauchen Sie überhaupt klonen, anstatt ImageID als Membervariable zu verwenden und dann einfach eine neue Instanz zu erstellen, wenn Sie es wollen? –

+4

Randbemerkung: Ist Ihnen bewusst, dass in der Schnittstelle definierte Felder "final" sind? – Pshemo

Antwort

-2

Ich glaube, Sie abstrakte Klasse mit abstrakter Klon() Methode verwendet werden könnten, das jede Klasse erbt von dieser abstrakten Klasse der Klon-Methode implementieren und gibt diese:

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

    public abstract MetaFactory clone(); 
} 

und in eines der geerbten Klassen implementieren die abstrakte Klasse wie folgt:

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

Haben Sie überprüft, dass Sie kompilieren? – alfasin

Verwandte Themen