-1
我在研究Java中的深拷貝和淺拷貝之間的區別。我創建了一個示例,我使用泛型類OrganizedGroup來管理Enterprizes,音樂組和其他人。然後,我使用不同的OrganizedGroup組創建一個容器。在一個泛型集合上創建克隆
import java.util.ArrayList;
interface Leader {
public void command();
}
class Singer implements Leader {
@Override
public void command() {
System.out.println("I'm a singer");
}
}
class Boss implements Leader {
@Override
public void command() {
System.out.println("I'm a boss");
}
}
class OrganizedGroup<T extends Leader> {
private T mandador;
public OrganizedGroup(T m) {
mandador = m;
}
public void posturaOficial() {
mandador.command();
}
public void setLeader(T m){
mandador = m;
}
}
class MusicGroup extends OrganizedGroup<Singer> {
public MusicGroup(Singer c) {
super(c);
}
public void playMusica() {
System.out.println("Playing music....");
}
}
class Enterprize extends OrganizedGroup<Boss> {
public Enterprize(Boss j) {
super(j);
}
public void makeDeal() {
System.out.println("Making a deal....");
}
}
public class Pruebas {
public static void main(String[] args) {
ArrayList<OrganizedGroup<? extends Leader>> go = new ArrayList();
OrganizedGroup<? extends Leader> g = new MusicGroup(new Singer());
go.add(g);
g = new Enterprize(new Boss());
go.add(g);
for (OrganizedGroup j : go) {
j.posturaOficial();
}
OrganizedGroup< ? extends Leader> t = go.get(0);
t.setLeader(new Singer()); //compile error
}
}
在最後一行我嘗試修改第一組的組長(我需要做的是,爲了見淺拷貝和深拷貝之間的差別(比如我克隆進入GO 2)),但它提供了以下編譯錯誤:
Singer cannot be converted to CAP#1 where CAP#1 is a fresh type-variable: CAP#1 extends Leader from capture of ? extends Leader
我需要的答案來解決這個問題,而不是編譯錯誤的解釋,更重要的是,什麼是錯的概念,應該是什麼變化,爲什麼,但。
請不要關注糟糕的設計問題我實際上對此做了不同的實現(OrganizedGroup是抽象的),但是我需要解決這個問題以便用泛型實踐。
其中是clone()方法? –
[實現與擴展。何時使用?有什麼區別?](http://stackoverflow.com/questions/10839131/implements-vs-extends-when-to-use-whats-the-difference) –
@BilboBaggins我做了一個例子來研究深度和淺拷貝,但要做到這一點我首先需要解決最後一行錯誤,這就是爲什麼我沒有寫一個克隆方法 – Rodrigo