Java 从方法';创建新对象;s参数

Java 从方法';创建新对象;s参数,java,Java,假设您有一个类x,方法是copy() 此方法copy()将类y作为参数获取复制(y测试) 我的问题是,如何从作为param发送的类中创建一个新对象,如下所示: public void copy(y villy){ villy v = new villy(); } public class FET { public static void main(String[] args){ Pokemon aerodactyl = new Pokemon

假设您有一个
x,方法是
copy()

此方法
copy()
y作为参数获取<代码>复制(y测试)

我的问题是,如何从作为param发送的类中创建一个新对象,如下所示:

public void copy(y villy){
       villy v = new villy();
    }
public class FET {

    public static void main(String[] args){

        Pokemon aerodactyl = new Pokemon (new Ability[]{ Ability.WALK, Ability.FLY  });
        Pokemon golduck    = new Pokemon (new Ability[]{ Ability.WALK, Ability.SWIM });

        System.out.println ("aerodactyl = " + aerodactyl);
        System.out.println ("golduck    = " + golduck   );
        System.out.println ();

        golduck.copy (aerodactyl);

        System.out.println ("aerodactyl = " + aerodactyl);
        System.out.println ("golduck    = " + golduck   );      // golduck has now the same abilities as aerodactyl
        System.out.println ();

        aerodactyl.abilities[0] = Ability.EXPLODE;              // change aerodactyl's abilities

        System.out.println ("aerodactyl = " + aerodactyl);
        System.out.println ("golduck    = " + golduck   );      // abilities of aerodactyl have changed but golduck's not
        System.out.println ();

    }

}

enum Ability {
    WALK,
    FLY,
    SWIM,
    TALK,
    EXPLODE
}

class Pokemon {

    public Ability[] abilities;

    public Pokemon (Ability[] abilities) {              // constructor
        this.abilities = abilities;
    }

    public void copy (Pokemon p) {                      // copy abilities of another Pokemon
        abilities = (Ability[]) p.abilities.clone();
    }

    public String toString() {                          // string representation of Pokemon
        String str = "Pokemon";
        if (abilities != null) {
            for(int i = 0; i < abilities.length; i++) {
                str += (i==0) ? ": " : ", ";
                str += abilities[i];
            }
        }
        return str;
    }

}

<强>您应该考虑y>强>类是父类,并且我将作为PARAMS的子代传递,所以该方法应该是创建一个新的对象,该类被发送为PARAM!

如果参数是
引用,并且该类具有不带参数的公共构造函数:

public void copy(Class cls){
   Object obj = cls.newInstance();
}
如果参数是实现
Cloneable
接口的某个对象,则需要相同类的另一个对象:

public void copy(Cloneable obj1){
   Object obj2 = obj1.clone();
}
编辑2016年1月20日

所以我假设每个对象都是一个口袋妖怪,它有一些能力,它有一个方法
copy
用来复制另一个口袋妖怪的能力。然后我会这样做:

public void copy(y villy){
       villy v = new villy();
    }
public class FET {

    public static void main(String[] args){

        Pokemon aerodactyl = new Pokemon (new Ability[]{ Ability.WALK, Ability.FLY  });
        Pokemon golduck    = new Pokemon (new Ability[]{ Ability.WALK, Ability.SWIM });

        System.out.println ("aerodactyl = " + aerodactyl);
        System.out.println ("golduck    = " + golduck   );
        System.out.println ();

        golduck.copy (aerodactyl);

        System.out.println ("aerodactyl = " + aerodactyl);
        System.out.println ("golduck    = " + golduck   );      // golduck has now the same abilities as aerodactyl
        System.out.println ();

        aerodactyl.abilities[0] = Ability.EXPLODE;              // change aerodactyl's abilities

        System.out.println ("aerodactyl = " + aerodactyl);
        System.out.println ("golduck    = " + golduck   );      // abilities of aerodactyl have changed but golduck's not
        System.out.println ();

    }

}

enum Ability {
    WALK,
    FLY,
    SWIM,
    TALK,
    EXPLODE
}

class Pokemon {

    public Ability[] abilities;

    public Pokemon (Ability[] abilities) {              // constructor
        this.abilities = abilities;
    }

    public void copy (Pokemon p) {                      // copy abilities of another Pokemon
        abilities = (Ability[]) p.abilities.clone();
    }

    public String toString() {                          // string representation of Pokemon
        String str = "Pokemon";
        if (abilities != null) {
            for(int i = 0; i < abilities.length; i++) {
                str += (i==0) ? ": " : ", ";
                str += abilities[i];
            }
        }
        return str;
    }

}
公共类场效应晶体管{
公共静态void main(字符串[]args){
口袋妖怪aerodactyl=新口袋妖怪(新能力[]{Ability.WALK,Ability.FLY});
口袋妖怪golduck=新口袋妖怪(新技能[]{Ability.WALK,Ability.SWIM});
System.out.println(“airdActyl=“+airdActyl”);
System.out.println(“golduck=“+golduck”);
System.out.println();
golduck.copy(机场货运公司);
System.out.println(“airdActyl=“+airdActyl”);
System.out.println(“golduck=“+golduck);//golduck现在拥有与aerodactyl相同的能力
System.out.println();
aerodactyl.abilities[0]=Ability.EXPLODE;//更改aerodactyl的能力
System.out.println(“airdActyl=“+airdActyl”);
System.out.println(“golduck=“+golduck);//机场精灵的能力已经改变,但golduck没有
System.out.println();
}
}
枚举能力{
步行
飞,
游泳,
说,,
爆发
}
类口袋妖怪{
公共能力[]能力;
公共口袋妖怪(能力[]能力){//constructor
这个。能力=能力;
}
公共无效副本(口袋妖怪p){//另一个口袋妖怪的复制能力
能力=(能力[])p.abilities.clone();
}
公共字符串toString(){//Pokemon的字符串表示形式
String str=“口袋妖怪”;
如果(能力!=null){
for(int i=0;i
做不到(或者至少没有一些可怕的反射技巧)。如果他们传入一个单例子类,而这个子类不应该有多个实例呢?探索反射库一个对象如何成为一个类?看,也许这会帮助你理解这种情况:将x类视为一个角色,这个角色有一个copy()能力,允许他成为y角色的精确副本。这个y字符可能会改变,它不仅仅是一个@resuemanWe正在从一个y类@PritamBanerjeeMy IDE(Android Studio)创建对象,这让我做了这样的事情:
public void copy(class cls)抛出IllegaccessException,InstantiationException{Object obj=cls.newInstance();}
只是为了通知你,我的意思是,这只是增加了一种抓住机会的方法exception@FET,指什么?指特定的全新对象created@FET,在第一种情况下,新对象存储在变量
obj
中,在第二种情况下-在
obj2
中。坦率地说,我们这里的所有人仍然不完全理解你们想要实现的目标。总体任务是什么?为什么需要在一个方法中创建不同类型的对象?您需要使用
copy
方法返回所创建的对象还是立即对其进行处理?