Java 在泛型集合上进行克隆
我试图研究Java中深度复制和浅层复制的区别。我创建了一个示例,其中我使用一个通用类OrganizedGroup来管理Enter奖品、音乐组和其他。然后,我用OrganizedGroup类型的不同组创建了一个容器Java 在泛型集合上进行克隆,java,generics,inheritance,wildcard,Java,Generics,Inheritance,Wildcard,我试图研究Java中深度复制和浅层复制的区别。我创建了一个示例,其中我使用一个通用类OrganizedGroup来管理Enter奖品、音乐组和其他。然后,我用OrganizedGroup类型的不同组创建了一个容器 import java.util.ArrayList; interface Leader { public void command(); } class Singer implements Leader { @Override public void comma
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
}
}
import java.util.ArrayList;
接口负责人{
公共无效命令();
}
班长{
@凌驾
公共作废命令(){
System.out.println(“我是歌手”);
}
}
班组长{
@凌驾
公共作废命令(){
System.out.println(“我是老板”);
}
}
类组织组{
私人T曼达多;
公共组织团体(T m){
mandador=m;
}
公共无效职务(){
mandador.command();
}
公共无效集引线(T m){
mandador=m;
}
}
类MusicGroup扩展了OrganizedGroup{
公共音乐组(歌手c){
超级(c);
}
公共音乐剧场(){
System.out.println(“播放音乐…”);
}
}
类Enterprize扩展OrganizedGroup{
公共企业奖(Boss j){
超级(j);
}
公开无效交易(){
System.out.println(“达成交易…”);
}
}
公共级普鲁巴{
公共静态void main(字符串[]args){
ArrayList无需写入:
OrganizedGroup< ? extends Leader> t = go.get(0);
在main的所有句子中都可以这样做。没有编译错误。clone()在哪里方法?@Bilbobbaggins我做了一个例子来研究深度复制和浅复制之间的差异,但要做到这一点,我首先需要解决最后一行错误,这就是为什么我没有编写克隆方法的原因。yetI建议你先阅读差异。基本上,在shalow克隆中,你只复制你试图克隆的对象中对象的引用ne,而不是对象本身,在深度克隆中,您正在克隆所有对象,即如果B对象在A中,则A上的浅层克隆将创建A的另一个实例,但仍将引用相同的B对象,而在深度克隆中,您将获得B的另一个对象。执行深度克隆的常用方法是序列化。
OrganizedGroup t = go.get(0)