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
方法返回所创建的对象还是立即对其进行处理?